awk語言的最基本功能是在檔案或字串中基於指定規則瀏覽和抽取資訊。 awk抽取資訊後,才能進行其他文字操作。完整的awk指令碼通常用來格式化文字檔案中的資訊。
本章僅注重於講述使用awk執行操作及怎樣從文字檔案和字串中抽取資訊。 本章內容有:
//檢視檔案
[root@lishan ~]# head -2 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
//取檔案passwd第二行
[root@lishan ~]# awk -f: 'nr==2' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
[root@lishan ~]# awk -f: nr==1 passwd
root:x:0:0:root:/root:/bin/bash
//取檔案passwd第一列
[root@lishan ~]# awk -f: '' passwd
root
bindaemon
admlp
sync
shutdown
halt
mail
operator
games
ftpnobody
//取檔案passwd第二行第一列
[root@lishan ~]# awk -f: 'nr==2' passwd
bin//取檔案passwd第二行最後一列
[root@lishan ~]# awk -f: 'nr==1' passwd
/bin/bash
//取檔案passwd第二行倒數第二列
[root@lishan ~]# awk -f: 'nr==1' passwd
/root
//取出ip位址用正規表示式
//[ /]表示指定範圍類任意乙個字元,+表示匹配前面任意乙個字元至少一次
[root@lishan ~]# ip a
1: lo: mtu 65536 qdisc noqueue state unknown qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
mtu 1500 qdisc pfifo_fast state up qlen 1000
link/ether 00:0c:29:69:c9:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.181.140/24 brd 192.168.181.255 scope global dynamic eth0
valid_lft 1569sec preferred_lft 1569sec
inet6 fe80::20c:29ff:fe69:c9c3/64 scope link
valid_lft forever preferred_lft forever
[root@lishan ~]# ip a|grep 'inet'|awk -f'[ /]+' 'nr==3'
192.168.181.140
//取出檔案abc找到含有lishan一行的最後一列
[root@lishan ~]# cat abc
lishan 1 66 haha
zhaojing 2 78 enen
wangxuan 3 34 hehe
yangwei 4 45 wowo
lishan 5 67 loulou
[root@lishan ~]# awk '/lishan/' abc
haha
//取出檔案abc中含有lishan的一行的最後一列,並寫入到檔案的a中
[root@lishan ~]# awk '/l/ishan/' abc | tee a
haha
loulou
[root@lishan ~]# ls
a abc network.repo nfs.sh passwd scp.exp server.sh ssh-keygen.exp test.awk
[root@lishan ~]# cat a
haha
loulou
//同時取出兩列中間要加入英文符號逗號會顯示出空格
[root@lishan ~]# awk '' abc
lishan 1
zhaojing 2
wangxuan 3
yangwei 4
lishan 5
[root@lishan ~]# awk '' abc
lishan1
zhaojing2
wangxuan3
yangwei4
lishan5
//在awk命令中加入begin開始語句會在輸出時顯示begin裡面的內容
[root@lishan ~]# awk 'begin ' abc
name rank
lishan 1
zhaojing 2
wangxuan 3
yangwei 4
lishan 5
//在awk語句中加入end語句會在輸出結尾處顯示end裡面的內容
[root@lishan ~]# awk 'begin end' abc
name rank
lishan 1
zhaojing 2
wangxuan 3
yangwei 4
lishan 5
以上是全部學生
//用指令碼執行awk命令,在指令碼中寫入想要執行的命令
[root@lishan ~]# cat test.awk
#!/bin/bash/awk
//用awk命令-f執行指令碼並且加需要執行指令碼的檔名
[root@lishan ~]# awk -f test.awk abc12
345//awk加入正規表示式(如果5小於29)就取出全部
[root@lishan ~]# awk '' abc
lishan 1 66 haha
zhaojing 2 78 enen
wangxuan 3 34 hehe
yangwei 4 45 wowo
lishan 5 67 loulou
//在abc檔案的第二列查詢有數字5的那一行並列印
[root@lishan ~]# awk '$2 ~ /5/' abc
lishan 5 67 loulou
//在abc檔案的第二列中取出除去不含數字5的那一行並列印
[root@lishan ~]# awk '$2 !~ /5/' abc
lishan 1 66 haha
zhaojing 2 78 enen
wangxuan 3 34 hehe
yangwei 4 45 wowo
[root@lishan ~]# awk '' abc
lishan 1 66 haha
zhaojing 2 78 enen
wangxuan 3 34 hehe
yangwei 4 45 wowo
//取出檔案中第一列以l開頭n結尾的哪一行
[root@lishan ~]# awk '$1 ~ /^l....n$/' abc
lishan 1 66 haha
lishan 5 67 loulou
//在檔案第三列查詢數字(66或者78)的哪一行並列印
[root@lishan ~]# awk '$3 ~ /(66|78)/' abc
lishan 1 66 haha
zhaojing 2 78 enen
//查詢檔案以l開頭的哪一行並列印
[root@lishan ~]# awk '/^l/' abc
lishan 1 66 haha
lishan 5 67 loulou
//取出檔案中以a結尾的哪一行
[root@lishan ~]# awk '/a$/' abc
lishan 1 66 haha
//取出檔名
[root@lishan ~]# awk 'end' passwd
passwd
//取出檔案總行數
[root@lishan ~]# cat passwd |wc -l
31[root@lishan ~]# awk 'end' passwd
31//取出檔案的總列數,和行數
[root@lishan ~]# awk '' abc
4 1 lishan 1 66 haha
4 2 zhaojing 2 78 enen
4 3 wangxuan 3 34 hehe
4 4 yangwei 4 45 wowo
4 5 lishan 5 67 loulou
awk命令基本用法
本文出自 我是幹勾魚的部落格 顯示磁碟使用情況 df h awk 這裡注意,awk工作流程是這樣的 讀取含有 n 換行符分割的一條記錄,然後將記錄按指定的域分隔符來劃分域,填充域。比如說統計file all.txt檔案內容的行數 awk end userinfo.csv在這裡,管道前列印所有行號,管...
awk用法小結
awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 argv 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors ...
awk 用法小結
awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 argv 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors ...