我有多个日志文件,我需要计算所有这些文件中某些模式的出现次数。
#!/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 *
但看起来计数不正确。我的上述方法是否正确处理多个文件?
答案 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
,此文件的记录号)。