awk使用

作者: 强出头 | 来源:发表于2018-03-02 17:58 被阅读0次

    awk上

    awk上

    分段查询,指定分隔符

    (打印第一段)
    [root@localhost ~]# awk -F ':' '{print $1}' passwd1 |head -4
    root
    bin
    daemon
    adm
    [root@localhost ~]# head -4 passwd1 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    (打印所有段)
    [root@localhost ~]# awk '{print $0}' passwd1 |head -4
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    

    分段查询不使用分隔符,则默认以空格或空白字符分割
    打印多段可以以 ,或者其它指定符号分割

    [root@localhost ~]# awk -F ':' '{print $1"#"$2"#"$3}' passwd1 |head -4
    root#x#0
    bin#x#1
    daemon#x#2
    adm#x#3
    

    指定查询包含 oo 的行

    [root@localhost ~]# awk '/oo/' passwd1 
    root:x:0:0:root:/root:/bin/bash
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    

    第一段包含

    [root@localhost ~]# awk -F ':' '$1 ~ /oo/' passwd1 
    root:x:0:0:root:/root:/bin/bash
    [root@localhost ~]# awk -F ':' '$1 ~ /oo+/' passwd1 
    root:x:0:0:root:/root:/bin/bash
    

    匹配并打印指定段

    [root@localhost ~]# awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' passwd1 
    root 0
    operator 11
    

    判断符号匹配

    [root@localhost ~]# awk -F ':' '$3=="0"' passwd1 
    root:x:0:0:root:/root:/bin/bash
    [root@localhost ~]# awk -F ':' '$3>="500"' passwd1 
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    (比较的是ASCII值比较的)
    [root@localhost ~]# awk -F ':' '$3>=500' passwd1 
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    wsl:x:1000:1000::/home/wsl:/bin/bash
    wsl1:x:1001:1001::/home/wsl1:/bin/bash
    [root@localhost ~]# awk -F ':' '$7!="/sbin/nologin"' passwd1 
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    wsl:x:1000:1000::/home/wsl:/bin/bash
    wsl1:x:1001:1001::/home/wsl1:/bin/bash
    

    awk下

    awk下

    判断符号匹配

    [root@localhost ~]# awk -F ':' '$3<$4' passwd1 
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    [root@localhost ~]# awk -F ':' '$3>"5" && $3<"7"' passwd1 
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    [root@localhost ~]# awk -F ':' '$3>1000 || $7=="/bin/bash"' passwd1 
    root:x:0:0:root:/root:/bin/bash
    wsl:x:1000:1000::/home/wsl:/bin/bash
    wsl1:x:1001:1001::/home/wsl1:/bin/bash
    

    指定打印的后的分隔符

    [root@localhost ~]# head -4 passwd1 |awk -F ':' '{OFS="#"}{print $1,$3,$4}'
    root#0#0
    bin#1#1
    daemon#2#2
    adm#3#4
    

    增加判断语句

    [root@localhost ~]# awk -F ':' '{OFS="#"}{if($3>1000){print $1,$3,$4}}' passwd1 
    wsl1#1001#1001
    

    显示行号

    [root@localhost ~]# awk -F ':' '{print NR":"$0}' passwd1 |head -5
    1:root:x:0:0:root:/root:/bin/bash
    2:bin:x:1:1:bin:/bin:/sbin/nologin
    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    显示每行段数

    [root@localhost ~]# awk -F ':' '{print NF":"$0}' passwd1 |head -5
    7:root:x:0:0:root:/root:/bin/bash
    7:bin:x:1:1:bin:/bin:/sbin/nologin
    7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    7:adm:x:3:4:adm:/var/adm:/sbin/nologin
    7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    行数小于10作为判断

    [root@localhost ~]# awk -F ':' 'NR<=10' passwd1 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@localhost ~]# awk -F ':' 'NR<=10 && $1 ~ /root|syrnc/' passwd1 
    root:x:0:0:root:/root:/bin/bash
    [root@localhost ~]# awk -F ':' 'NF<=10 && $1 ~ /root|syrnc/' passwd1 
    root:x:0:0:root:/root:/bin/bash
    

    NR和NF做参数

    [root@localhost ~]# awk -F ':' '{print $NR":"$NF}' passwd1 |head -4
    root:/bin/bash
    x:/sbin/nologin
    2:/sbin/nologin
    4:/sbin/nologin
    

    赋值

    [root@localhost ~]# awk -F ':' '{OFS=":"}  $1="root"' passwd1 |head -4
    root:x:0:0:root:/root:/bin/bash
    root:x:1:1:bin:/bin:/sbin/nologin
    root:x:2:2:daemon:/sbin:/sbin/nologin
    root:x:3:4:adm:/var/adm:/sbin/nologin
    

    计算第三段的和

    [root@localhost ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' passwd1 
    4606
    

    相关文章

      网友评论

          本文标题:awk使用

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