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
...

我想计算具有唯一 id 且其中具有#add#属性的行并具有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

或者只是sortgrep

$ 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

这个单线为您提供两条独特的线

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

组合grep,和: cut_sortwc

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 回答