Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从日志文件中计算具有匹配模式的行数_Linux_Shell_Unix_Awk_Grep - Fatal编程技术网

Linux 从日志文件中计算具有匹配模式的行数

Linux 从日志文件中计算具有匹配模式的行数,linux,shell,unix,awk,grep,Linux,Shell,Unix,Awk,Grep,My 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#

My 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属性的行&having isTrial=true

对于上面的代码段,输出应该是2

有谁能提供我可以在上面的日志文件上运行的linux命令吗?

这也算在内

grep "isTrial=true" abc.log | grep "#add#" | awk ' { print $4 }' | sort | uniq | wc -l 
这也很重要

grep "isTrial=true" abc.log | grep "#add#" | awk ' { print $4 }' | sort | uniq | wc -l 
组合grep、cut、sort和wc:

根据您的喜好自定义正则表达式,对其匹配的行更严格/不太严格

如果分隔符是空格而不是制表符,则cut-f4-d''合并grep、cut、sort和wc:

根据您的喜好自定义正则表达式,对其匹配的行更严格/不太严格

如果您的分隔符是空格而不是制表符,则仅使用awk剪切-f4-d'':

计数唯一行 $awk'$3~添加&&$5~正确&&!u[$4]++{++c}结束{print c}'文件 2. 打印唯一行 $awk'$3~添加&&$5~正确&&!u[$4]+'文件 信息我的服务添加id=67986324423 isTrial=true 信息我的服务添加id=43634636365 isTrial=true 或者只是排序和grep

$sort-uk4,4文件| grep add.*true 信息我的服务添加id=67986324423 isTrial=true 信息我的服务添加id=43634636365 isTrial=true $sort-uk4,4文件| grep-c add.*true 2. 使用just awk:

计数唯一行 $awk'$3~添加&&$5~正确&&!u[$4]++{++c}结束{print c}'文件 2. 打印唯一行 $awk'$3~添加&&$5~正确&&!u[$4]+'文件 信息我的服务添加id=67986324423 isTrial=true 信息我的服务添加id=43634636365 isTrial=true 或者只是排序和grep

$sort-uk4,4文件| grep add.*true 信息我的服务添加id=67986324423 isTrial=true 信息我的服务添加id=43634636365 isTrial=true $sort-uk4,4文件| grep-c add.*true 2.
这一行给出了结果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

awk -F'#add# id=' '$2~/true/{a[$2]}END{print length(a)}' abc.log
这一行给你两个独特的行

awk -F'#add# id=' '$2~/true/&&!a[$2]++' abc.log

谢谢…如果id包含字母,上面的命令还会工作吗?谢谢…如果id包含字母,上面的命令还会工作吗?等等:cut-f4在那里什么都不做!如果被否决的选民能解释为什么他认为这个答案如此糟糕或不正确,我将不胜感激。我没有被否决,但我很好奇:这不是贪婪吗?等等:cut-f4在那里什么都不做!如果下一个投票人能解释为什么他认为这个答案如此糟糕或不正确,我会很感激。我没有下一个投票,但我很好奇:会不会这样。*贪婪?更少的进程…我喜欢它+1我认为这可能更干净,更容易找到,例如awk'$3==add&&$5==isTrial=true{++c;}END{print c;}'或awk'$3==add&&$5==isTrial=true{seen[$4]=1;}END{fori-seen print i;}可能更有效,也可能没有,但正确的想法是+1…@twalberg您建议的第一个脚本并没有考虑唯一id,但我认为您需要在行匹配上比较字段。@sudo_O Doh。。。正当我的想法是,第一个应该是动作位:awk'$3==add&&$5==isTrial=true{seen[$4]=1;}END{print lengthseen;}。现在,如果我能编辑评论…哪一个会运行得很快…只使用awk还是使用grep cut sort uniq?更少的进程…我喜欢它+1我认为这会更干净,更容易搜索,例如awk'$3==add&&$5==isTrial=true{++c;}END{print c;}或awk'$3==add&$5==isTrial=true{seen[$4]=1;}END{for I in seen print I;},分别-虽然可能更有效,也可能不更有效,但对于正确的想法,+1…@twalberg您建议的第一个脚本没有考虑唯一id,但我认为您的观点是通过行匹配比较字段。@sudo\u O Doh。。。正当我的想法是,第一个应该是动作位:awk'$3==add&&$5==isTrial=true{seen[$4]=1;}END{print lengthseen;}。现在,如果我可以编辑评论…哪一个会运行得很快…使用awk还是使用grep cut sort uniq?