我的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命令,我可以对上面的日志文件运行吗?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
合并grep
,cut
,sort
和wc
:
grep '#add#.*isTrial=true$' /path/to/file | cut -f4 | sort -u | wc -l
根据自己的喜好自定义正则表达式(对它匹配的行更严格/更严格)。
(cut -f4 -d' '
如果您的分隔符是空格而不是制表符
答案 3 :(得分:-1)
这也很重要
grep "isTrial=true" abc.log | grep "#add#" | awk ' { print $4 }' | sort | uniq | wc -l