zoukankan      html  css  js  c++  java
  • 详解 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
  • 相关阅读:
    view和activity的区别
    接口对象的实例化在接口回调中的使用
    GreenDao
    HAOI 2012 高速公路
    SDOI2010 地精部落
    hdu 1505 City Game
    uva 1506 Largest Rectangle in a Histogram
    2017 济南综合班 Day 2
    uva 12325 Zombie's Treasure Chest
    uva 11212 Editing a Book
  • 原文地址:https://www.cnblogs.com/lgj8/p/12637019.html
Copyright © 2011-2022 走看看