zoukankan      html  css  js  c++  java
  • Linux三剑客之awk命令

    awk的格式

    • awk指令是由模式,动作,或者模式和动作的组合组成。
    • 模式既pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。比如NR==1,这就是模式,可以把他理解为一个条件。
    • 动作即action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。比如awk使用格式:

    options:设置的命令参数。

    -F:设置字段分隔符,默认以空格为分隔符。可设置多个分隔符,如-F '[:/]+'设置一个或多个:或/为分隔符

    pattern:条件。如NR==1

    NR:Number Of Record,正在处理的行号。

    RS:Record Separator,输入输出数据记录分隔符,每行之间的分隔符,默认为 。

    NF:当前行号的最后一列,也就是当前行号的列数,如果将某行分为7列,则NF为7,$NF为当前行的第7列数据。

    action:执行的动作。如print $1

     0 root@PC:~# cat test.txt
     1 root:x:0:0:root:/root:/bin/bash
     2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
     3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
     4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
     5 sync:x:4:65534:sync:/bin:/bin/sync
     6 games:x:5:60:games:/usr/games:/usr/sbin/nologin
     7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
     8 lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
     9 mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    10 systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
    1 root@PC:~# awk -F ":" 'NR>5&&NR<8{print $1,$3}' test.txt
    2 games 5
    3 man 6
    4 -F:设置字段分隔符为:默认为空格
    5 NR:Number Of Record行号
    6 printf $1,$3,输出第1字段和第3字段
    1 root@PC:~# awk -F ":" 'NR==3{print $NF}' test.txt
    2 /usr/sbin/nologin
    将字段分隔符设置为":",第3行,第1列bin,第2列x,第3列2,第4列2,第5列bin,第6列/bin,第7列/usr/sbin/nologin,$NF为最后一列
    1 root@PC:~# awk -F ":" 'NR==2{print NR,$1} NR==3{print NR,$NF}' test.txt
    2 2 daemon
    3 3 /usr/sbin/nologin
    将字段分隔符设置为":",当第2行时,输出当前行号和第1列的值,当第3行时,输出当前行号和最后一列的值。其中有两个pattern和action,每个action跟在相对应得pattern后面。
     1 root@PC:~# awk -F '[:/]' 'NR>3&&NR<8{print $7}' test.txt
     2 dev
     3 bin
     4 usr
     5 var
     6 root@PC:~# awk -F ':' 'NR>3&&NR<8{print $7}' test.txt
     7 /usr/sbin/nologin
     8 /bin/sync
     9 /usr/sbin/nologin
    10 /usr/sbin/nologin
     1 root@PC:~# ll
     2 total 28
     3 drwx------  3 root root 4096 Jul 28 12:08 ./
     4 drwxr-xr-x 24 root root 4096 May 20 22:59 ../
     5 -rw-r--r--  1 root root 3106 Oct 23  2015 .bashrc
     6 drwx------  2 root root 4096 Jul 20  2016 .cache/
     7 -rw-------  1 root root   32 Jul 28 12:08 .lesshst
     8 -rw-r--r--  1 root root  148 Aug 17  2015 .profile
     9 -rw-r--r--  1 root root  460 Jul 28 11:44 test.txt
    10 root@PC:~# ll|awk 'BEGIN{size=0;} {size+=$5;} END{print "size",size,"B"}'
    11 size 16034 B
    使用ll将目录中详细信息输出,其中第5列是子目录的大小,awk中BEGIN块,一般作为初始化变量,中间为其他执行过程,END块为最后结果,当然也可去除BEGIN和END块,BEGIN块和END块也可不同时出现。
  • 相关阅读:
    浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
    浙大数据结构课后习题 练习二 7-2 一元多项式的乘法与加法运算 (20 分)
    浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
    浙大数据结构课后习题 练习一 7-1 最大子列和问题 (20 分)
    PAT Basic 1019 数字黑洞 (20 分)
    PAT Basic 1017 A除以B (20 分)
    PAT Basic 1013 数素数 (20 分)
    PAT Basic 1007 素数对猜想 (20 分)
    PAT Basic 1003 我要通过! (20 分)
    自动化运维——HelloWorld(一)
  • 原文地址:https://www.cnblogs.com/hwli/p/11258473.html
Copyright © 2011-2022 走看看