码迷,mamicode.com
首页 > 系统相关 > 详细

Linux三剑客之awk命令

时间:2019-07-28 13:51:00      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:一个   syn   inux   sed   mic   amp   idt   file   att   

awk的格式

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

技术图片

options:设置的命令参数。

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

pattern:条件。如NR==1

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

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

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块也可不同时出现。

 

Linux三剑客之awk命令

标签:一个   syn   inux   sed   mic   amp   idt   file   att   

原文地址:https://www.cnblogs.com/hwli/p/11258473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!