2017-12-09 2 views
1

Ich denke, ich bin nah dran, und sah ähnliche Fragen, aber konnte es nicht funktionieren wie ich will. Also, ich habe mehrere Log-Dateien und ich möchte das Auftreten von verschiedenen Serviceaufrufen nach Datum zählen.grep mehrere Dateien erhalten Zählung der einzigartigen Schnitt

Zuerst habe ich versucht, die unten, der Schnitt gerade ist das erste Element (Datum) und 11.es Element (Name des Service-Aufrufs) zu erhalten, die zu meiner Protokolldatei spezifisch ist:

grep -E "invoking webservice" *.log* | cut -d ' ' -f1 -f11 | sort | uniq -c 

Aber diese zurück etwas, das wie folgt aussieht:

5 log_1.log:2017-12-05 getLegs() 
10 log_1.log:2017-12-05 getArms() 
7 log_2.log:2017-12-05 getLegs() 
13 log_2.log:2017-12-04 getLegs() 

Was ich wirklich will, ist:

12 2017-12-05 getLegs() 
10 2017-12-05 getArms() 
13 2017-12-04 getLegs() 

I-Prüfung gesehen habe Sie sehen zuerst das gleiche Problem.

cat * | grep -E "invoking webservice" *.log* | cut -d ' ' -f1 -f11 | sort | uniq -c 

Was mache ich falsch? Wie immer, vielen Dank!

Antwort

2

Ihr Problem scheint zu sein, dass grep die übereinstimmenden Zeilen mit den Dateinamen voranstellt. (grep hat dieses Verhalten, wenn mehrere Dateinamen angegeben sind, die Ergebnisse eindeutig zu machen.) Sie können die -h-grep passieren nicht die Dateinamen drucken:

grep -h "invoking webservice" *.log | cut -d ' ' -f1 -f11 | sort | uniq -c 

Bitte beachte, dass ich ließ die -E Flagge, weil es verwendet wird, um Aktivieren Sie erweiterte Regex-Unterstützung, und Ihr Beispiel benötigt es nicht.

Alternativ können Sie cat verwenden, um den Inhalt von Dateien auf die Standardausgabe auszugeben und diesen an grep zu leiten. Das würde funktionieren, weil es die Notwendigkeit für Dateinamen Parameter für grep entfernt:

cat *.log | grep "invoking webservice" | cut -d ' ' -f1 -f11 | sort | uniq -c 
+0

lol so einfach, danke. Müssen Sie in der Dokumentation nachlesen. Vielen Dank! – WhitneyChia

Verwandte Themen