Aus Einträgen in Files sollen Dateien entstehen-
Aus Einträgen in Files sollen Dateien entstehen-
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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
einfach mit > in eine Datei pipen, oder?
ansonsten poste mal deinen code
ratte
ansonsten poste mal deinen code
ratte
Re: Aus Einträgen in Files sollen Dateien entstehen-
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.
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.
Re: Aus Einträgen in Files sollen Dateien entstehen-
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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
> 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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
und was hält dich also ab, den oben vorgeschlagenen code mal auszuprobieren? oder gibt es noch andere probleme?
Re: Aus Einträgen in Files sollen Dateien entstehen-
Bin noch auf der Arbeit, probiere diesen dann nach Feierabend aus.
Grüße
Michael
Grüße
Michael
Re: Aus Einträgen in Files sollen Dateien entstehen-
Hallo,
hat super funktioniert, das habe ich gesucht.
Vielen Dank!!
Michael
hat super funktioniert, das habe ich gesucht.
Vielen Dank!!
Michael
Re: Aus Einträgen in Files sollen Dateien entstehen-
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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
> 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"!
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"!
Re: Aus Einträgen in Files sollen Dateien entstehen-
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
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
Re: Aus Einträgen in Files sollen Dateien entstehen-
> 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.
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.
Re: Aus Einträgen in Files sollen Dateien entstehen-
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
das sieht ja richtig super aus!
Ich teste das auch sofort (gegen Abend), und gebe dann Bescheid, ob es funktioniert hat.
Grüße
Michael