我正在学习AWK,并试图计算到特定目的地的会话数。
使用此命令:
awk '{print $9}' traffic-log-cust.txt | sort | uniq -c
,我得到以下输出。
#awk '{print $9}' traffic-log-cust.txt | sort | uniq -c
1
1 10.10.17.72/38403->157.55.235.140/40046
1 10.10.17.72/38403->157.55.235.146/40006
1 10.10.17.72/38403->157.55.235.148/40039
1 10.10.17.72/38403->157.55.235.159/40019
1 10.10.17.72/38403->157.55.235.160/40019
1 10.10.17.72/38403->157.55.56.156/40046
1 10.10.17.72/38403->157.55.56.174/40018
1 10.10.17.72/38403->64.4.23.156/40017
1 10.10.17.72/38403->64.4.23.164/40011
1 10.10.17.72/38403->64.4.23.166/40053
1 10.10.17.72/38403->65.55.223.16/40003
1 10.10.17.72/38403->65.55.223.44/40002
#
,我相信第9个字没有空格,也包含目标IP。
我想知道如何根据目标IP计算会话数。
预先感谢。
答案 0 :(得分:1)
我猜您在确定每个字段的大小时遇到问题。 (您的问题尚不清楚。)我认为您不需要;只需将每行分成两个字段并处理第二个字段。
使用awk,您可以使用-F选项指定分隔符,并且由于在许多shell中大于号(>)都是有意义的,因此您必须以某种方式对其进行转义。在Linux中,您可以使用反斜杠。
由于您使用的是awk
,因此您不需要 sort
和uniq
;可以使用关联数组。
假设您没有忽略端口:
awk -F\> '{dest_ips[$2]++}
END {
for (ip in dest_ips) {
printf "%s: %d\n", ip, dest_ips[ip]
}
}' traffic-log-cust.txt
如果忽略端口,则必须先解析第二个字段(也许使用split()
)。