awk命令-定义单词的大小

时间:2018-10-03 09:54:06

标签: awk

我正在学习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计算会话数。

预先感谢。

1 个答案:

答案 0 :(得分:1)

我猜您在确定每个字段的大小时遇到​​问题。 (您的问题尚不清楚。)我认为您不需要;只需将每行分成两个字段并处理第二个字段。

使用awk,您可以使用-F选项指定分隔符,并且由于在许多shell中大于号(>)都是有意义的,因此您必须以某种方式对其进行转义。在Linux中,您可以使用反斜杠。

由于您使用的是awk,因此您不需要 sortuniq;可以使用关联数组。

假设您没有忽略端口:

awk -F\> '{dest_ips[$2]++} 
           END {
             for (ip in dest_ips) {
               printf "%s: %d\n", ip, dest_ips[ip]
             }
          }' traffic-log-cust.txt

如果忽略端口,则必须先解析第二个字段(也许使用split())。