Linux 如何使用AWK获取字段的计数?

Linux 如何使用AWK获取字段的计数?,linux,shell,networking,awk,Linux,Shell,Networking,Awk,我面临着从特定ip获取文件日志数的挑战 日志如下所示: Apr 24 16:00:28 192.168.5.5 : %ASA-6-106100: access-list inside denied udp inside/172.29.2.101(1039) -> outside/192.203.230.10(53) hit-cnt 1 first hit [0xd820e56a, 0x0] Apr 24 16:00:28 192.168.5.6 : %ASA-6-106100: acce

我面临着从特定ip获取文件日志数的挑战

日志如下所示:

Apr 24 16:00:28 192.168.5.5 : %ASA-6-106100: access-list inside denied udp inside/172.29.2.101(1039) -> outside/192.203.230.10(53) hit-cnt 1 first hit [0xd820e56a, 0x0]

Apr 24 16:00:28 192.168.5.6 : %ASA-6-106100: access-list inside denied udp inside/172.29.2.101(1039) -> outside/192.203.230.10(53) hit-cnt 1 first hit [0xd820e56a, 0x0]
我使用下面的命令从ip 192.168.5.5获取“Apr 24”的计数

我尝试了上面的命令,得到了结果,但我不确定结果是否正确


如果我做错了什么,请添加您的评论。

awk是一个很好的工具,但这只能用grep解决。尝试以下方法


zcat文件名| grep“Apr 24”| grep“192.168.5.5:| wc-l

awk是一个很好的工具,但这只能使用grep解决。尝试以下方法



zcat文件名| grep“Apr 24”| grep“192.168.5.5:| wc-l

逐个尝试管道的每个部分。第一部分仅打印IP。第二部分是日期。结果不匹配的原因应该很明显。如果你的
awk
只打印字段4,你的
grep
将无法再找到
Apr 24
…一个
awk
就足够了-不需要2个
grep
s和
wc
试试
zcat…|awk'/Apr 24/&&/192\.168\.5/{print{4}“
@EdMorton请随意继续并全面回答-我只是在正确的方向上轻推…逐个尝试管道的每个部分。第一部分只打印IP。第二部分为日期。应该很明显为什么没有结果匹配。如果您的
awk
只打印字段4,则您的
grep
将不会出现错误。”nger能够找到
Apr 24
…一个
awk
就足够了-不需要2个
grep
s和
wc
试试
zcat…| awk'/Apr 24/&&/192\.168\.5/{print{4}“
@EdMorton可以自由地继续全面回答-我只是朝着正确的方向轻推了一下…为什么你要使用2个对grep的调用,1个对wc的调用和2个管道,而不仅仅是1个对awk的调用?你的脚本相当于
zcat filename | awk'/Apr 24/&&/192.168.5.5:/{c++}END{print c+0}”“
使用稍有不同的awk代码可以使其更加健壮,但使用multi-grep方法会让您运气不佳。感谢您的评论,但是如果ip在日志消息中匹配,例如“访问列表内部拒绝udp内部/192.168.5.5(1039)->外部/192.203.230.10(53)命中cnt 1首次命中[0xd820e56a,0x0]”您也可以将这两个grep组合起来。如
zcat filename | grep“Apr 24.*192.168.5.5:| wc-l
,这也将根据您的文件模式工作。同样,更简单有效的方法是
grep“Apr 24.*192.168.5.5:”filename | wc-l
为什么要使用两个grep调用、一个wc调用和两个管道而不是一个awk调用?您的脚本相当于
zcat filename | awk'/Apr 24/&/192.168.5.5:/{c++}END{print c+0}“
使用稍有不同的awk代码可以使其更加健壮,但使用multi-grep方法会让您运气不佳。感谢您的评论,但是如果ip在日志消息中匹配,例如“访问列表内部拒绝udp内部/192.168.5.5(1039)->外部/192.203.230.10(53)命中cnt 1首次命中[0xd820e56a,0x0]”您还可以将这两个grep组合在一起。如
zcat filename | grep“Apr 24.*192.168.5.5:“| wc-l
,这也将根据您的文件模式工作。更简单有效的方法是
grep”Apr 24.*192.168.5.5:“filename | wc-l
# zcat filename | grep "Apr 24" | awk '{print $4}' | grep "192.168.5.5" | wc -l