1. 程式人生 > >Linux三劍客之awk

Linux三劍客之awk

awk

前言

awk是linux實際工作中最重要強大的工具,而且還是一門編程語言,可以用來處理數據和生成報告(Excel),處理的數據可以是一個或多個文件。

一>顯示出某個範圍內的內容

測試文件及內容如下:

[root@192 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> 顯示文件中的第五行

[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.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>顯示文件中第二行到第六行的內容,並打印行號

[root@192 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>顯示文件中的第一列,第三列和最後一列

[root@192 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函數功能實踐)

[root@192 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