awk

作者: DB哥 | 来源:发表于2019-09-29 08:38 被阅读0次

    Linux System Environment

    [root@commond ~]# cat /etc/redhat-release 
    CentOS Linux release 7.5.1804 (Core)                        #==》系统版本
    [root@commond ~]# uname -r
    3.10.0-862.el7.x86_64                                       #==》内核版本
    [root@commond ~]# uname -m
    x86_64                                                     #==》系统架构
    [root@commond ~]# echo $LANG
    en_US.UTF-8                                                #==》系统字符集
    [root@commond ~]# awk - -version
    GNU Awk 4.0.2                                              #==》awk版本
    

    awk功能

    1、对数据扫描并进行分析处理
    2、截取列
    

    awk格式

    awk  '{}'  filename
    awk  'BGEIN{}  {}  END{}'
    

    awk 参数

    1、-F        #==》指定分隔符
    2、NR            #==》显示行号
    3、NF            #==》浏览记录域的个数
    4、$NF           #==》打印最后一列
    4、$0            #==》打印所有
    3、$1            #==》显示第一列,$2显示第二列,以此类推
    

    一、awk截取列

    [root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print $1}'
    oldboy
    user01
    

    二、显示列的个数

    [root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print $0}'
    oldboy:x:1000:1000:oldboy:/home/oldboy:/bin/bash
    user01:x:1001:1001::/home/user01:/bin/bash
    [root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print NF}'
    7
    6
    

    三、打印以d开头或以01结尾的字符串

    [root@commond ~]# ls -l /mnt/ | awk '/^d/'
    drwxr-xr-x 2 root root     89 Jun 18 11:44 backup01
    [root@commond ~]# ls -l /mnt/ | awk '/01$/'
    drwxr-xr-x 2 root root     89 Jun 18 11:44 backup01
    

    四、打印倒数的列

    [root@commond tmp]# tail -2 /etc/passwd | awk -F "[:]+" '{print $NF}'
    /bin/bash
    /bin/bash
    [root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print $(NF-1)}'
    /home/oldboy
    /home/user01
    

    五、获取第1行到第5行的列

    [root@commond ~]# awk -F "[:]+" 'NR>=1 && NR<=5 {print NR,$1,"|",$2}' /etc/passwd
    1 root | x
    2 bin | x
    3 daemon | x
    4 adm | x
    5 lp | x
    

    六、截取第1行和第3行的列

    [root@commond ~]# awk -F "[:]+" 'NR==1 || NR==3 {print NR,$1,"|",$2}' /etc/passwd
    1 root | x
    3 daemon | x
    

    七、添加BEGIN和END

    [root@commond ~]# cat /etc/passwd | awk -F : 'BEGIN{print "name,shell"} NR>=1 && NR<=3{print $1,$NF} END{print "end"}' 
    name,shell
    root /bin/bash
    bin /sbin/nologin
    daemon /sbin/nologin
    end
    

    八、统计网络连接状态

    [root@commond ~]# ss -a | awk -F "[ ]+" '{print $2}' | sort -n | uniq -c
         88 ESTAB
         33 LISTEN
          1 State
         56 UNCONN
    [root@commond ~]# ss -an | awk '{S[$2]++} END{for(a in S) {print S[a],a}}'
    33 LISTEN
    88 ESTAB
    1 State
    56 UNCONN
    

    九、统计文本行数

    [root@commond ~]# awk '{count++;} END{print count}' /etc/passwd
    22
    

    相关文章

      网友评论

          本文标题:awk

          本文链接:https://www.haomeiwen.com/subject/gyzhyctx.html