Hallo zusammen,
Ich versuche schon laenger, meiner Konsole beizubringen, mir neben einem Word Count auch das Datum auszugeben.
Was klappt:
gzcat sys.log.2006* | grep 2006-03-06 | grep Suchwort | wc -l
=> dann bekomme ich eine korrekte Zahl
Ich hätte aber gerne 2006-03-06 -> 99
Folgendes geht nicht:
awk ‚{print "2006-03-06 -> "}‘ | gzcat sys.log.2006* | grep 2006-03-06 | grep Suchwort | wc -l
Das Einschliessen der Greps in den AWK-Befehl hat auch nicht geklappt.
Kann mir da jemand helfen??
Danke schon mal,
Mightbee
Hallo zusammen,
Hi,
gzcat sys.log.2006* | grep 2006-03-06 | grep Suchwort | wc -l
Ich hätte aber gerne 2006-03-06 -> 99
awk ‚{print "2006-03-06 -> "}‘ | gzcat sys.log.2006* | grep 2006-03-06 | grep Suchwort | wc -l
Das Einschliessen der Greps in den AWK-Befehl hat auch nicht
geklappt.
Wie waere
$ echo -n "2006-03-06 -\> "; gzcat sys.log.2006\* |grep 2006-03-06 |grep Suchwort |wc -l
Oder… also, naja,
Gruss vom Frank.
Hallo,
gzcat sys.log.2006* | grep 2006-03-06 | grep Suchwort | wc -l
=> dann bekomme ich eine korrekte Zahl
Ich hätte aber gerne 2006-03-06 -> 99
Du kannst vorher einfach date ausführen. Mit
date ‚+%Y-%m-%d‘ ; gzcat …
bekommst du in die Zeile davor schonmal das Datum. Wie man das newline am Ende der date-Ausgabe mit unix-Bordmitteln weiss ich nicht genau (ich war noch nie Freund von sed und awk), aber mit perl kann ich dir helfen:
date '+%Y-%m-%d' | perl -ne 'chomp;print $\_, " -\> "'; zgrep 2006-03-06 sys.log.2006\* |grep -c Suchwort
Und wenn du immer nach dem aktuellen Datum suchen willst, kannst du ‚2006-03-06‘ durch $(date ‚+%Y-%m-%d‘) ersetzen.
HTH,
Moritz
date ‚+%Y-%m-%d‘ ; gzcat …
bekommst du in die Zeile davor schonmal das Datum. Wie man das
newline am Ende der date-Ausgabe mit unix-Bordmitteln weiss
ich nicht genau (ich war noch nie Freund von sed und awk),
aber mit perl kann ich dir helfen:
Ohne sed und awk, das kann die Shell alleine:
$ echo -n `date +%F`
(ist uebrigens synonym zu %Y-%m-%d und die ‚‘ braucht es nicht, muss kein Zeichen escaped werden, und -n ist uebrigens bash, die sh hat da, glaube ich -c, weiss nicht mehr genau, braucht eh keiner…)
Und wenn du immer nach dem aktuellen Datum suchen willst,
kannst du ‚2006-03-06‘ durch $(date ‚+%Y-%m-%d‘) ersetzen.
Wobei auch $() bashism ist, `` kompatibel und more obfuscating… das aber nur am Rande.
Gruss vom Frank.
Wobei auch $() bashism ist, `` kompatibel und more
obfuscating… das aber nur am Rande.
Hallo Frank,
Einspruch:
-
ksh (und andere) können das auch ( $() und das ganze Zeug wie ${} …)
-
obfuscating: kann ich nicht behaupten. Vielleicht nur dann, wenn man sich ältere Shellscript-Bücher (aus den 90er und davor) anschaut. Irgendwie ist das Konstrukt Backticks scheinbar nicht totzukriegen (oder es schreiben alle voneinander ab, naja tun wir ja wohl alle 
-
Spätestens, wenn man versucht mehrere Ausdrücke mit Backticks zu verschachteln, wird landet man in weniger als 2 Stunden in der Klappsmühle. Mit $() alles kein Problem, die Klammerung bildet einen schönen Hierarchiebaum und die Shell kümmert sich um alles.
Ich vermute jedoch aufgrund deines ‚bashism‘-Hinweises, dass ich dir diese Vorteile nicht erklären muss. Ich wollte nur dem Eindruck relativieren, dass $() ein irgendwie komisches Konstrukt ist („kein Standard, läuft ja eh nur bei diesen komischen Freaks^H^H^H^H^H^HLinuxern…“), widersprechen.
gruss
bernhard
Hallo zusammen,
Das ECHO war der Tipp, der mir fehlte. Mit awk schwebte ich wohl schon in höheren Sphären…
Falls es jemanden amüsiert: so sieht mein Komplettstatement jetzt aus:
gzcat sys.log.2006* | grep „Suchwort“ | awk ‚{print $1}‘ | sort | uniq | awk ‚{print "echo -n „“ $1 " -> „; gzcat sys.log.2006* | grep " $1 " | grep Suchwort | wc -l“ }‘ > ~/doit.sh
=> doit.sh ist dann ausführbar und liefert mir Statistiken: Bsp.:
2006-03-10 -> 8
2006-03-11 -> 1
2006-03-13 -> 16
2006-03-14 -> 19
Danke noch mal an alle!!
Mightbee