如何使用awk计算多个文件中的模式

时间:2018-02-12 10:58:44

标签: awk file-processing

我有多个日志文件,我需要计算所有这些文件中某些模式的出现次数。

#!/usr/bin/awk
match($0,/New connection from user \[[a-z_]*\] for company \[([a-z_]*)\]/, a) 
{instance[a[1]]++}

END {
 for(i in instance)
 print i":"instance[i]
}

我正在运行这样的脚本:

awk -f script *  

但看起来计数不正确。我的上述方法是否正确处理多个文件?

1 个答案:

答案 0 :(得分:0)

尝试将花括号移动到与match功能相同的行。否则,每一行都会出现instance[a[1]]++。它也没有打印出每场比赛的全线,开始吗? <{1}}在自己的行上将有match的默认操作。

{print}

有关如何读取单个文件名的更多详细信息at the GNU site,但一般适用。 #!/usr/bin/awk match($0,/pattern/, a) { instance[a[1]]++ } END { for(i in instance) print i":"instance[i] } 是在读取任何文件之前,BEGIN毕竟是,并且变量保持不变,除了少数内置(例如END,此文件的记录号)。