解释一下 awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}每个字段的意思
如果NF代表字段 那最后应该是7 才对啊 还有最后怎么都是1呢?
END前面的是查看并发吧 后面是查看 tcp连接数 是这样吗? 展开
awK下标表示为字符串:
用户可能见过其他语言的NTA[10];它表示一个包含10个元素的数组,下标为0,1,2,9
Awk的下标是字符串,在简单的英语中,字符串就像散列函数,比如["Hello"]='world',但我们称它们为数组
另外,请理解NF是字段的数量,字段的数量。例如,如果一行是helloWorld,那么NF就是2
但是添加$,即$NF表示第二个字段的内容,而$NF2表示world
现在如果我回到文本,++S[$NF],这有点像使用字典来计数文件
HelloWorld你好
所以++S[$NF]是S["hello"]=2,S["world"]=1
/^TCP/意味着对每一行进行常规匹配,因为netstat将为UDP生成行,所以我们将使用常规过滤
然后打印a,S[a],也就是2,hello1,world
扩展资料:
注意事项:
在字符串的末尾传递一个空字符串。打印函数不会在字符串末尾添加换行符,而是添加一个空字符串。
默认情况下打印末尾有换行符的行:
End = ""表示末尾不换行,使用空格。交互模式下,效果如下:> > > print (' a ') > > print (' a ', end = ' ') > > > print (' a ', end = '1234') a1234 > >0 >1。
{++S[$NF] 的意思是 统计每行最后一个出现的次数,至少一次,放入数组中。
其实这个代码不适合这个文件,看不出来效果。$NF的意思就是打印最后一行。
也没必要写个数组。
[root@localhost ~]# awk '{print $1,$NF}' cc
tcp 3
tcp 4
tcp 5
tcp 6
可能你在其它语言见过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的行,所以我们要用正则过滤
最后print a,S[a] 就很容易懂了,就是 2,hello 1,world
$NF是最后一个字段,
END前面是把最后一个字段+1放到数组S中,END是把数组打印出来, 关联数组的key是最后一个字段的值,value都是1(因为默认值是0,++后是1),.
2.你只进行了数组初始化,下标为字段数,值为空,进行预加1后,值为1.