0

私の abc.log には、以下のエントリ (スニペット) が含まれています。

...
INFO #my-service# #add# id=67986324423 isTrial=true
INFO #my-service# #add# id=43536343643 isTrial=false
INFO #my-service# #add# id=43634636365 isTrial=true
INFO #my-service# #add# id=67986324423 isTrial=true
INFO #my-service# #delete# id=43634636365 isTrial=true
INFO #my-service# #delete# id=56543435355 isTrial=false
...

#add#属性を持つ一意の ID を持つ行を数えたいと思いますisTrial=true

上記のスニペットの場合、出力は 2 になるはずです

上記のログ ファイルに対して実行できる Linux コマンドを教えてもらえますか?

4

4 に答える 4

4

だけを使用awk

# Count unique line
$ awk '$3~"add"&&$5~"true"&&!u[$4]++{++c}END{print c}' file
2

# Print unique lines
$ awk '$3~"add"&&$5~"true"&&!u[$4]++' file
INFO #my-service# #add# id=67986324423 isTrial=true
INFO #my-service# #add# id=43634636365 isTrial=true

sortまたは単にgrep

$ sort -uk4,4 file | grep "#add#.*true" 
INFO #my-service# #add# id=67986324423 isTrial=true
INFO #my-service# #add# id=43634636365 isTrial=true

$ sort -uk4,4 file | grep -c "#add#.*true"
2
于 2013-01-10T20:03:57.257 に答える
1

このワンライナーは結果2を与えます

awk -F'#add# id=' '$2~/true/{a[$2]}END{print length(a)}' abc.log

このワンライナーは、2つのユニークなラインを提供します

awk -F'#add# id=' '$2~/true/&&!a[$2]++' abc.log
于 2013-01-10T21:22:43.470 に答える
0

grepcutsortおよび を組み合わせるwc:

grep '#add#.*isTrial=true$' /path/to/file | cut -f4 | sort -u | wc -l

正規表現を好みに合わせてカスタマイズします (どの行に一致するかについて、より厳密/より厳密ではありません)。

(cut -f4 -d' '区切り文字がタブではなくスペースの場合)

于 2013-01-10T20:01:30.697 に答える
-1

これもカウントされます

grep "isTrial=true" abc.log | grep "#add#" | awk ' { print $4 }' | sort | uniq | wc -l 
于 2013-01-10T19:58:29.353 に答える