2016-12-23 5 views
0

Meine Protokolldateien sind im Schlüsselwertformat. Ich möchte den Wert einer bestimmten Taste auf tail -f finden .. in log einer der Linie Angenommen ist:So finden Sie den Wert eines Schlüssels am Tail -f

ts=2016-12-23-18-31-34-849 | deviceType=LENOVO Lenovo A6000 | elapsed=11 | firstHomePage=null | installId=37797b61-0bb1-4c1a-844c-5904c7e83de8 | ip=157.48.104.146 
ts=2016-12-23-18-31-34-849 | deviceType=LENOVO Lenovo A6000 | elapsed=15 | firstHomePage=null | installId=37797b61-0bb1-4c1a-844c-5904c7e83de8 | ip=157.48.104.146 

Ich bin nicht sicher, wie ich Rohr Ausgang meines tail -f so dass die Ausgabe sollte werden folgende

11 
15 
+0

Ist es eine stetig wachsende Datei? – Inian

Antwort

2

Verwenden GNU grep mit dem Befehl --line-bufferedstdout zwischenzuspeichern, wie es im Fall eintrifft von kontinuierlich wachsender Datei. Das -o Flag für die Übereinstimmung nur das Muster und -P für die Aktivierung perl Stil regEx erfasst.

tail -f file | grep --line-buffered -oP "elapsed=\K(\d+)" 
11 
15 

Von der man grep Seite

--line-buffered 
     Use line buffering on output. 
2

Versuchen grep:

tail log_file | grep -o '\<elapsed=[^[:space:]]*' | cut -d= -f2 
+0

Hat nicht funktioniert .. druckte nichts – Deepak

+0

@Deepak Ich habe mein Kommando mit Ihrer Probe getestet. Aber Sie haben vielleicht ein anderes Unix oder Grep als ich. Ich habe meine Antwort aktualisiert, um '\ S' durch eine alternative Syntax zu ersetzen. – xhienne

+0

Danke .. Ergebnisse kamen nach einiger Zeit und in Chunks .. mit --line-gepuffert zusammen mit Ihrem dieser Befehl funktioniert gut – Deepak

0
awk -F'[=|]' '{print $6}' file 
11 
15 
+0

Ich denke eigentlich, dies ist die beste Lösung, weil es die prägnanteste +1 ist –

Verwandte Themen