我有以下awk命令。我试图找到错误并从错误中打印第一行。如果错误具有匹配的字符串,那么我试图将其添加到计数中,然后在END语句中打印结果。
如何使用if条件满足我对以下语句的要求,并打印错误的出现次数?
awk '/^SomeError[0-9]+/ {for(i=0;i<=3;i++){getline;if(i==0 && $1 ~ /PATTERN_TO_FIND/ ){print;count++;}}} END {print count;}' SomeLogfile.log.2015-07-06 | less
今天如果我使用带有以下正则表达式的if条件,它什么都不打印。如果我从命令中删除它,包括他的结束语句,它会打印结果,但我也想使用这个条件进行计数和打印。
$1 ~ /PATTERN_TO_FIND/
答案 0 :(得分:3)
如果你的PATTERN TO FIND中有空格,请改用$ 0。 $ 0~ / PATTERN TO FIND /
答案 1 :(得分:2)
这将打印以SomeError
开头的行,如果第一行的第一个字段也匹配PATTERN
,则递增计数:
awk '/^SomeError/ {print;if($1 ~ /PATTERN/){count++;}} END {print count;}' filename
如果您想在第一行的任何位置计算PATTERN
,请将$1
替换为$0
。
答案 2 :(得分:0)
从msr的回答中,我能够自己找出解决方案。以下命令对我有用。
awk BEGIN {count=0;} '/^SomeError[0-9]+/ {getline;if($0 ~ /PATTERN_TO_MATCH/){print $0;count++} END {print count;}' SomeLogfile.log.2015-07-06