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的主要内容,如果未能解决你的问题,请参考以下文章

linux基础学习-18-linux三剑客之awk命令精讲

不看绝对后悔的Linux三剑客之awk实战精讲

linux 文本三剑客之awk

awk && sed ====linux 三剑客之awk 命令

linux基础篇-文本三剑客之AWK

linux 三剑客之 awk