2019年4月22日 星期一

【LINUX】SHELL編程的awk指令用法

範例文件1 名稱:awktest 正常檢視文件內容如下

[root@rosalie ~]# cat awktest
name tel
tina 0911111111
nono 0922222222
ken 0933333333
piggy 09444444

讀取第一欄內容:awk '{print $1}' 文件名
讀取第二欄內容:awk '{print $2}' 文件名

[root@rosalie ~]# awk '{print $1}' awktest
name
tina
nono
ken
piggy

去掉表頭讀取第二欄內容:awk 'NR!=1{print $2}' 文件名

[root@rosalie ~]# awk 'NR!=1{print $2}' awktest
0911111111
0922222222
0933333333
09444444

只列出含有091111111的列:awk '$0~/0911111111/{print}' 文件名

[root@rosalie ~]# awk '$0 ~ /0911111111/{print}' awktest
tina 0911111111

列出不含ken的列但含表頭:awk '$1 !~/ken/' 文件名

[root@rosalie ~]# awk '$1 !~ /ken/' awktest
name tel
tina 0911111111
nono 0922222222
piggy 09444444

列出不含ken的列,且不含表頭:awk '$1 !~/ken/' 文件名|grep -v "name"

[root@rosalie ~]# awk  '$1 !~ /ken/' awktest |grep -v "name"
tina 0911111111
nono 0922222222
piggy 09444444


範例文件2  名稱:passwd 文件內容如下

[root@rosalie ~]# cat /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mysql:x:500:500::/home/mysql:/bin/bash
rosalie:x:501:500::/home/rosalie:/bin/bash

取帳號欄位,以-F":"為區隔""內的符號可變,例如空白或是其他符號,此範例以:來分隔,
意思是取:之後的第一欄(第一種作法):awk -F":" '{print $1}'

[root@rosalie ~]# awk -F":" '{print $1}' /etc/passwd
nobody
vcsa
saslauth
postfix
sshd
ntp
tcpdump
mysql
rosalie

以":"為區隔取第一欄f1(第二種作法):cut -d ":" -f1 

[root@rosalie ~]# cut -d ":" -f1 /etc/passwd
nobody
vcsa
saslauth
postfix
sshd
ntp
tcpdump
mysql
rosalie

在取得的欄位上填加字串"NAME ": awk -F ":" '{print "NAME " $1}' 
 [root@rosalie ~]# awk -F ":" '{print "NAME " $1}' /etc/passwd
NAME nobody
NAME vcsa
NAME saslauth
NAME postfix
NAME sshd
NAME ntp
NAME tcpdump
NAME mysql
NAME rosalie

取第及四及欄:awk -F ":" '{print $4,$3}'  

[root@rosalie ~]# awk -F ":" '{print $4,$3}' /etc/passwd
99 99
69 69
76 499
89 89
74 74
38 38
72 72
500 500
500 501

取最後一欄:awk -F":" '{print $(NF)}'

[root@rosalie ~]# awk -F ":" '{print $(NF)}' /etc/passwd
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/bin/bash


沒有留言:

張貼留言