如果条件匹配字符串,则为AWK

时间:2015-07-07 16:58:41

标签: linux awk

我有以下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/

3 个答案:

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