2016-12-23 3 views
0

私のログファイルはキー値形式です。私は出力がすべきように-f私の尾のパイプ出力を行うかどうかはわかりませんよテールのキーの値を見つける方法-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 

:私は、ログ内の行の と仮定1が..です-fテール上の特定のキーの値を見つけたいです

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

は、それが継続的に成長しているファイルですか? – Inian

答えて

2

使用GNU grep--line-bufferedコマンドで、それはケースに到着したようstdoutをバッファリングする:grepを試してみてください

11 
15 
2

を、以下のこと継続的に成長するファイルの。パターンのみを一致させるための-oフラグとスタイルregExを有効にする-Pフラグ。 man grepページから

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

--line-buffered 
     Use line buffering on output. 
+0

動作しませんでした。何も印刷されませんでした – Deepak

+0

@Deepak私はあなたのサンプルで私のコマンドをテストしました。しかし、私とは違うUnixやgrepを持っているかもしれません。私は '\ S'を代わりの構文に置き換える答えを更新しました。 – xhienne

+0

ありがとうございました。結果はしばらくしてから、チャンクに入ってきました。このコマンドと一緒に--line-bufferedを使用すると、うまく動作します。 – Deepak

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

実際には、これが最も簡潔な+1 –

関連する問題