前言

     awk是linux实际工作中最重要强大的工具,而且还是一门编程语言,可以用来处理数据和生成报告(Excel),处理的数据可以是一个或多个文件。

一>显示出某个范围内的内容

测试文件及内容如下:

[root@192 data]# cat testAwk.txt root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologin

1>  显示文件中的第五行

[root@192 data]# awk 'NR==5' testAwk.txt lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

说明:NR在awk中表示行号(记录号),NR==5表示行号等于5的行。awk后面所接的内容要用单引号。

2>显示文件中第二行到第六行的内容

[root@192 data]# awk 'NR==2,NR==6' testAwk.txtbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync

3>显示文件中第二行到第六行的内容,并打印行号

[root@192 data]# awk 'NR==2,NR==6 {print NR,$0}' testAwk.txt 2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync

说明:print关键字表示显示的内容,相当于是awk内部的一个命令。NR还是表示行号,$0表示一整行的内容。

4>显示文件中的第一列,第三列和最后一列

[root@192 data]# awk -F ":" '{print $1,$3,$NF}' testAwk.txt root 0 /bin/bashbin 1 /sbin/nologindaemon 2 /sbin/nologinadm 3 /sbin/nologinlp 4 /sbin/nologinsync 5 /bin/syncshutdown 6 /sbin/shutdownhalt 7 /sbin/haltmail 8 /sbin/nologinoperator 11 /sbin/nologingames 12 /sbin/nologinftp 14 /sbin/nologinnobody 99 /sbin/nologin

说明: A.这里我们使用了awk的-F参数,-F参数表示指定一把“菜刀分隔符”来切割每一行的内容,-F后面可用单引号双引号或不加引号,建议最好使用双引号。

B.使用"$(美元符号)"后面接数字,$1表示第一个部分(第一列),$2(第二列),$3(第三列),依次类推,但是$0表示整行。$NF表示最后一列。

5>把文件中的/sbin/nologin替换为/bin/bash(awk函数功能实践)

    

[root@192 data]# awk '{gsub("/sbin/nologin","/bin/bash",$0);print $0}' testAwk.txt 

root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/bin/bashdaemon:x:2:2:daemon:/sbin:/bin/bashadm:x:3:4:adm:/var/adm:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/bin/bashoperator:x:11:0:operator:/root:/bin/bashgames:x:12:100:games:/usr/games:/bin/bashftp:x:14:50:FTP User:/var/ftp:/bin/bashnobody:x:99:99:Nobody:/:/bin/bash

注意:A.gsub与后面的括号之间不能有空格.

B.替换对象,替换成什么内容以及哪一列之间要用逗号分隔开.

C.替换对象的外面要用双引号或者双斜线包裹起来,即"替换对象"

D.替换成什么内容就只能用双引号包裹起来了,即“替换成什么内容”

E.最后一个是哪一列。