Aus Einträgen in Files sollen Dateien entstehen-

Message
Author
Michael

Aus Einträgen in Files sollen Dateien entstehen-

#1 Post by Michael »

Hallo zusammen,

ich möchte gerne folgende Aufgabe lösen.
Aus einer bestimmten Anzahl Logfiles, grepe ich mir einen bestimmten Syntax heraus.
Diesen Syntax, es können unterschiedlich viele Zeilen sein (abhängig von der Anzahl der Logfiles), möchte ich gerne als Datei anlegen.

Ich komme dan nicht so richtig weiter. Das ganze müsste als Schleife funktionieren, aber ich bekomme es nicht geregelt
Danke schon mal im Voraus.

Michael

ratte

Re: Aus Einträgen in Files sollen Dateien entstehen-

#2 Post by ratte »

einfach mit > in eine Datei pipen, oder?

ansonsten poste mal deinen code

ratte

rattengift

Re: Aus Einträgen in Files sollen Dateien entstehen-

#3 Post by rattengift »

hallo Michael,
ich verstehe auch nicht ganz, was du machen willst. du hast eine bestimmte (feste?) zahl von logfiles. ist das grep-suchmuster für jede datei gleich oder abhängig von der datei? dann willst du sämtliche grep-ergebnisse zusammen in einer datei ablegen? wenn das suchmuster immer gleich ist, dann würde doch (wie auch ratte meinte) ein einfaches "grep ... > file" genügen. also erklär mal genauer.

Michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#4 Post by Michael »

hallo und schon mal danke, ich teste die Sache noch einmal und dann poste ich das scripte.

Das mit > war mir klar, aber scheinbar war/ist in der Schleife ein Fehler.
Wie geschrieben, ich teste noch einmal und melde mich dann.
Vorab schon eimal mein Vorhaben.
Beispiel:
In den Dateien C0000001 - C0000120 grepe ich z. B. nach Zeilen mit "FAX" und schneide mit cut noch die entsprechenden Bereiche heraus.
Das kann eine Telefon oder Faxnummer sein wie z.B. 49-1234-56789, oder auch 49-89565-5555666.
Nun möchte ich leere Files mit eben diesen Namen anlegen.

Schicke den Syntax dann noch.

grüße
michael

Michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#5 Post by Michael »

Hi und hier kommt der Syntax.

Irgendwie raff ich das nicht so richtig.
Hoffe auf Hilfe, war bestimmt mal wieder so ein dummer Denkfehler.

Gruß
Michael

PS Die Variable "AUSZUG" ist recht lang, aber so erhalrte ich genau das, was ich möchte.

CODE
AUSZUG=`grep "from" c* |grep recvq | cut -b11-25,66- | awk '{ print $1,$2,$3,$5,$6,$7,$9}' | tr "/" " " | sed s/route// | sed s/to// | cut -d"," -f1 | awk '{print $5, $6, $7}' | tr -d "+" | tr -d " "`

for FILE in `cat $AUSZUG`
do touch $FILE >/tmp/tester/$FILE
done

rattengift

Re: Aus Einträgen in Files sollen Dateien entstehen-

#6 Post by rattengift »

> PS Die Variable "AUSZUG" ist recht lang, aber so erhalrte ich genau das, was ich möchte.

ich nehme an, du hast mal "echo $AUSZUG" gemacht, um das zu prüfen. nehmen wir also an, AUSZUG enthält die richtigen dateinamen.


> for FILE in `cat $AUSZUG`

for FILE in $AUSZUG; do

> do touch $FILE >/tmp/tester/$FILE

die files sollen also leer angelegt werden? ---> touch /tmp/tester/$FILE

michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#7 Post by michael »

Hallo,

ja, die Files sollen leer sein und nur den Namen des "gegrepten" (z.B. 49-1234-56789, oder auch 49-89565-5555666) erhalten.
echo "$AUSZUG" zeigt mir genau das an, was ich haben möchte. Der Syntax ist lang, aber er funktioniert.

Gruß
Michael

rattengift

Re: Aus Einträgen in Files sollen Dateien entstehen-

#8 Post by rattengift »

und was hält dich also ab, den oben vorgeschlagenen code mal auszuprobieren? oder gibt es noch andere probleme?

Michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#9 Post by Michael »

Bin noch auf der Arbeit, probiere diesen dann nach Feierabend aus.

Grüße
Michael

michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#10 Post by michael »

Hallo,

hat super funktioniert, das habe ich gesucht.

Vielen Dank!!
Michael

Michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#11 Post by Michael »

Hallo,

eine Sache habe ich aber noch
Ich gebe mal ein Beispiel. Ich möchte gerne AUSZUG1 und AUSZUG2 in einer Zeile haben.
Ich erhalte z.B. aus AUSZUG1 den Syntax MICHAEL, aus AUSZUG2 2003.

Ich möchte nun, dass das Ergebnis beides kombiniert zu MICHAEL2003.
Ich hatte dies mal versucht, aber bei einem "echo" hatte er die Variablen untereinander ausgegeben.

Grüße
Michael

PS Habe den String unter abgekürzt, das Original ist länger. Es geht ja nun nur noch um das Prinzip.

CODE
AUSZUG1=`grep "from" c* |grep recvq | cut -b11-25,66-`
AUSZUG2=`grep "from" c* |grep recvq | cut -b1-35,80-`

ERGEBNIS="$AUSZUG1""$AUSZUG2"

for FILE in `cat $ERGEBNIS`
do touch $FILE >/tmp/tester/$FILE
done

rattengift

Re: Aus Einträgen in Files sollen Dateien entstehen-

#12 Post by rattengift »

> Ich möchte gerne AUSZUG1 und AUSZUG2 in einer Zeile haben. Ich erhalte z.B. aus AUSZUG1 den Syntax MICHAEL, aus AUSZUG2 2003.

moment mal, was geht hier ab? AUSZUG1 und AUSZUG2 enthalten doch jeweils mehrere wörter, oder habe ich das falsch verstanden?
---> dann musst du mit arrays arbeiten.

> ERGEBNIS="$AUSZUG1""$AUSZUG2"

mhh, ERGEBNIS="${AUSZUG1}${AUSZUG2}" wäre etwas sauberer. aber das klappt auch nur, wenn die auszüge atomare werte haben. wenn sie mehrere zeilen haben, macht das keinen sinn (---> arrays verwenden, s.o.).

> for FILE in `cat $ERGEBNIS`

--> "for FILE in $ERGEBNIS" (denn die datei $ERGEBNIS gibts ja noch gar nicht, kann also nicht gecattet werden).

> do touch $FILE >/tmp/tester/$FILE

äh, was machst du? das hatten wir doch auch bereits: "touch /tmp/tester/$ERGEBNIS"!

Michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#13 Post by Michael »

Hallo,

danke für den Hinweis. Die Sache mit den Arrays habe ich mal gehört.
Habe aber noch nicht die große Ahnung, werde mich nun mal mit dem Lesen dieser Angelegenheit beschäftigen.
Und ja muß ich auch noch auf die Frage antworten, es sind mehrere Wörter in der Variablen.

Grüße und nochmals DANKE
Michael

rattengift

Re: Aus Einträgen in Files sollen Dateien entstehen-

#14 Post by rattengift »

> Die Sache mit den Arrays habe ich mal gehört. werde mich nun mal mit dem Lesen dieser Angelegenheit beschäftigen.

da helf ich schon, ich wollte nur zunächst wissen, ob ich richtig verstanden habe.
also AUSZUG1 und AUSZUG2 enthalten jeweils mehrere einträge, und die sollen nun PAARWEISE zu filenamen zusammengebaut werden, richtig?
also das 1.wort von AUSZUG1 und das erste wort von AUSZUG2 sollen einen filenamen bilden, ebenso die jeweils 2.wörter usw.

also statt AUSZUG1=` grep..... ` schreibst du
declare -a AUSZUG1=( `grep........` )
analog AUSZUG2. damit werden die elemente nicht alle zusammen in eine variable sondern jeweils in ein eigenes array-element abgelegt.
dann das hier:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
# ausgeben der arrays (nur für testphase, später entfernen)
c=0
while [ "${AUSZUG1[c]}" != "" ]; do
echo "$c: ${AUSZUG1[c]}${AUSZUG2[c]}"
c=$[ c + 1 ]
done

# erzeugen der files
c=0
while [ "${AUSZUG1[c]}" != "" ]; do
touch /tmp/tester/${AUSZUG1[c]}${AUSZUG2[c]}
c=$[ c + 1 ]
done</font><hr></pre></blockquote>
code ist nicht getestet. probiers einfach aus. zunächst kannst du ja mal nur die erste schleife testen, bevor du die dateien dann wirklich erzeugst.

michael

Re: Aus Einträgen in Files sollen Dateien entstehen-

#15 Post by michael »

Hallo,

das sieht ja richtig super aus!
Ich teste das auch sofort (gegen Abend), und gebe dann Bescheid, ob es funktioniert hat.

Grüße
Michael

Post Reply