详解 awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}每个字段的意思

 

用这个列子说好了
如果NF代表字段 那最后应该是7 才对啊 还有最后怎么都是1呢?
END前面的是查看并发吧 后面是查看 tcp连接数 是这样吗?
 
 
 
awk下标采用字符串来表示
可能你在其它语言见过int a[10];这代表有10个元素的数组,下标为0,1,2,,,9
而awk的下标是字符串,说白了,像极了hash,比如a["hello"] = 'world',只不过我们称之为数组
同时,你要明白NF是字段数,number of field .比如某一行文件为 hello world,那么NF为2
但是加上$,即$NF就代表第二个字段的内容,那么$NF2 为world

现在回到正文,++S[$NF],就有点类似于,用字典统计文件
比如hello world hello
那么++S【$NF】的结果就是S【“hello”】 = 2,S["world"] = 1

/^tcp/ 表示对每一行进行正则匹配,因为我们netstat会产生udp的行,所以我们要用正则过滤
for (var in array) 就是数组的遍历,但是有个坑,man awk,找到其中关于语句for (var in array)的说明,终于恍然大悟——其中写着:The order that var transverses the indices of array is not defined. 即var以怎样的顺序遍历array是未定义的,而我却一直想当然地把它理解成for (var=1; var <= maxindex; var++)的一种简化写法。所以,面对未知的事物,还是要保持谨慎的态度

最后print a,S[a] 就很容易懂了,就是 2,hello 1,world
原文地址:https://www.cnblogs.com/lgj8/p/12637019.html