2017-01-09 8 views
0

ログファイルを解析してuserIdsを抽出しようとしています。以下は、catalina.outの各ログの設定方法です。私はuserIdだけを抽出したいと思います。どうすればそれができますか?私はawkとgrepを試しましたが、userIdの代わりにブロック全体を返します。また、同じユーザーが複数回ログインすることができるので、すべての一意のユーザーIDを一度取得する必要があります。あなたは私がどこから始めるべきかを知る手助けをしてくれますか?ありがとう!ここでログファイルを解析するBashスクリプト

は、私が試したコマンドは次のとおりです。

awk '/userId/' catalina.out 

grep "userId" catalina.out 

私が代わりのuserIdをバック返すのでこれを行うと(下図のように)、それは

ログブロック全体を戻ります形式:

03:44:04.373 [127.0.0.1-8009-exec-178] 
INFO c.c.c.x.x.w.f.AuthenticationFilter - cachObj 
{"guid":"guid","userId":"userId","isPrimary":false,"accessToken":"accessToken"} 
+0

JSON出力のように見えます。適切なパーサーを使用してください。 – Inian

+0

ログのサンプルは1行か複数ですか? – Zlemini

答えて

0

私はあなたのユーザーIDは "はuserId" のように発見されると仮定しています: "test_chumma"これが当てはまる場合は、以下のようにあなたを助けてくれるかもしれません。

awk -F'[":,]' '/userId/{print $11}' Input_file 

もちろん、より多くの要件がある場合は、完全な条件でより多くのサンプル出力を見せてください。

+0

入力ファイル名でコマンドを実行しようとしましたが、結果が返ってこない。 – redsox2002

+0

@ redsox2002:さらにInput_fileのサンプルを投稿に投稿し、私たちに知らせてください。 – RavinderSingh13

0

awkを持つもう一つの例:

awk -F"[:,]" '$1 ~ /^{/ {gsub("\"","",$4); print $4}' inFile.log 

ここでは、コロン:またはカンマでレコードを分割, awkコマンドのF-F[:,]を使用して、その後、ブラケットで始まる$1レコードの最初のフィールド場合(私たちは条件のための正規表現演算子~を使用)/^{/はその後、私たちは何もgsub("\"","",$4)で4番目のフィールドの二重引用符を交換し、その結果を印刷print $4

$ cat test 
03:44:04.373 [127.0.0.1-8009-exec-178] 
INFO c.c.c.x.x.w.f.AuthenticationFilter - cachObj 
{"guid":"guid","userId":"aUserId","isPrimary":false,"accessToken":"accessToken"} 
$ awk -F"[:,]" '$1 ~ /^{/ {gsub("\"","",$4); print $4}' test 
aUserId 
+0

残念ながら、このコマンドを使用して結果を返さないでください。 – redsox2002

+0

上記の3行のログファイルを使用しました。これを私の箱に載せて正確な結果を投稿します。おそらくあなたのログファイルはあなたの例と異なってフォーマットされていますか? – JNevill

0

はここで別のソリューションの組み合わせのawkとUNIXからカットです:

awk '{split($0,a,":"); print a[2]}' catalina.out | cut -f2 -d"," 
"userId" 

しかし、これはまた、あなたが投稿たとえばのみ動作します。

0
awk -F\" '{print $6}' file 

userId 
関連する問題