Linux三剑客之awk
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客之awk相关的知识,希望对你有一定的参考价值。
前言
awk是linux实际工作中最重要强大的工具,而且还是一门编程语言,可以用来处理数据和生成报告(Excel),处理的数据可以是一个或多个文件。
一>显示出某个范围内的内容
测试文件及内容如下:
[[email protected] data]# cat testAwk.txt 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 games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin
1> 显示文件中的第五行
[[email protected] data]# awk 'NR==5' testAwk.txt lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
说明:NR在awk中表示行号(记录号),NR==5表示行号等于5的行。awk后面所接的内容要用单引号。
2>显示文件中第二行到第六行的内容
[[email protected] data]# awk 'NR==2,NR==6' testAwk.txt 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
3>显示文件中第二行到第六行的内容,并打印行号
[[email protected] data]# awk 'NR==2,NR==6 {print NR,$0}' testAwk.txt 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 6 sync:x:5:0:sync:/sbin:/bin/sync
说明:print关键字表示显示的内容,相当于是awk内部的一个命令。NR还是表示行号,$0表示一整行的内容。
4>显示文件中的第一列,第三列和最后一列
[[email protected] data]# awk -F ":" '{print $1,$3,$NF}' testAwk.txt root 0 /bin/bash bin 1 /sbin/nologin daemon 2 /sbin/nologin adm 3 /sbin/nologin lp 4 /sbin/nologin sync 5 /bin/sync shutdown 6 /sbin/shutdown halt 7 /sbin/halt mail 8 /sbin/nologin operator 11 /sbin/nologin games 12 /sbin/nologin ftp 14 /sbin/nologin nobody 99 /sbin/nologin
说明: A.这里我们使用了awk的-F参数,-F参数表示指定一把“菜刀分隔符”来切割每一行的内容,-F后面可用单引号双引号或不加引号,建议最好使用双引号。
B.使用"$(美元符号)"后面接数字,$1表示第一个部分(第一列),$2(第二列),$3(第三列),依次类推,但是$0表示整行。$NF表示最后一列。
5>把文件中的/sbin/nologin替换为/bin/bash(awk函数功能实践)
[[email protected] data]# awk '{gsub("/sbin/nologin","/bin/bash",$0);print $0}' testAwk.txt
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash daemon:x:2:2:daemon:/sbin:/bin/bash adm:x:3:4:adm:/var/adm:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/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 mail:x:8:12:mail:/var/spool/mail:/bin/bash operator:x:11:0:operator:/root:/bin/bash games:x:12:100:games:/usr/games:/bin/bash ftp:x:14:50:FTP User:/var/ftp:/bin/bash nobody:x:99:99:Nobody:/:/bin/bash
注意:A.gsub与后面的括号之间不能有空格.
B.替换对象,替换成什么内容以及哪一列之间要用逗号分隔开.
C.替换对象的外面要用双引号或者双斜线包裹起来,即"替换对象"
D.替换成什么内容就只能用双引号包裹起来了,即“替换成什么内容”
E.最后一个是哪一列。
二>
以上是关于Linux三剑客之awk的主要内容,如果未能解决你的问题,请参考以下文章