1. awk簡介
awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。
awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 awk 的 gnu 版本。
awk其名稱得自于它的創始人 alfred aho 、peter weinberger 和 brian kernighan 姓氏的首個字母。實際上 awk 的確擁有自己的語言: awk 程式語言 , 三位建立者已將它正式定義為「樣式掃瞄和處理語言」。它允許您建立簡短的程式,這些程式讀取輸入檔案、為資料排序、處理資料、對輸入執行計算以及生成報表,還有無數其他的功能。
2. awk常見用法案例
2.1 使用last命令檢視登入記錄並顯示最新的5行結果:
[root@zcwyou ~]# last -n 5
輸出結果如下:
root pts/0 192.168.1.1 sat nov 24 13:42 still logged in
root pts/1 192.168.1.1 sat nov 24 09:41 - 14:11 (04:30)
root pts/1 192.168.1.1 sat nov 24 09:15 - 09:41 (00:26)
root pts/1 192.168.1.1 sat nov 24 09:13 - 09:14 (00:01)
root pts/1 192.168.1.1 sat nov 24 09:05 - 09:13 (00:08)
2.2 使用last命令檢視登入記錄並顯示最新5行結果的第1列:
輸出結果如下:
root
root
root
root
root
wtmp
awk工作流程是這樣的:讀入有''換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,
1表示第乙個域,
1表示登入使用者,$3表示登入使用者ip,以此類推。使用awk格式化輸出結果
2.3 檢視/etc/passwd內容,僅輸出第一列。
輸出結果如下:[root@zcwyou ~]# cat /etc/passwd |awk -f ':' ''
root
bindaemon
admlp
sync
shutdown
halt
operator
games
ftpnobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
tcpdump
zcwyou
2.4 關鍵字搜尋
搜尋/etc/passwd有root關鍵字的所有行
輸出結果[root@zcwyou ~]# awk -f: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2.5 匹配字元位置
找到以root開頭的行,並列印
輸出結果:[root@zcwyou ~]# awk -f: '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
2.6 過濾列的內容
輸出/etc/passwd的第2列和第3列:
得到很奇怪的結果:[root@zcwyou ~]# awk '' /etc/passwd
user:/var/ftp:/sbin/nologin
network management:/:/sbin/nologin
message bus:/:/sbin/nologin
for polkitd:/:/sbin/nologin
ssh:/var/empty/sshd:/sbin/nologin
原因是預設域分隔符是"空白鍵" 或 "[tab]鍵",並不是:號
2.7 指定域分隔符
指定域分隔符為:,根據分隔符列印第1列和第7列,即使用者名稱和對應的shell。
輸出結果:[root@zcwyou ~]# awk -f"[:]" '' /etc/passwd
awk指定域分隔符輸出
2.8 查詢時精確匹配內容
某行中的第乙個字段必須等於 root 才列印。$0表示所有列
2.9 排除字元列印/etc/passwd的內容,除去帶有root的行[root@zcwyou ~]# awk -f: '$1=="root"' /etc/passwd
使用雙引號或者反斜槓都是一樣的[root@zcwyou ~]# awk -f: '$0!~"root"' /etc/passwd
2.10 自定義輸出格式:
列印/etc/passwd,格式為:
檔名,所在的行號,該行列數,該行的內容:root:x:0:0:root:/root:/bin/bash
命令:
[root@zcwyou ~]# awk -f ':' '{print "filename:" filename
Linux awk命令的使用
awk是linux非常強大的報告生成工具 基本使用格式 awk options script file awk options pattern file option f 切割符 0整行 1第一列 2第二列.位址定界 pattern1 pattern2 兩個正則之間的範圍 pattern 所有被匹配...
LINUX awk命令使用簡介
awk是一種處理文字檔案的語言,是乙個強大的文字分析工具。這裡只介紹平時使用最多的幾種用法。awk命令是逐行來進行的。1.awk 123.txt 將123.txt中的內容按行讀取並用 預設的空格來分隔,取第1段。2.awk f 123.txt 將123.txt中的內容按行讀取並用 分隔,取第1段。3...
Linux awk命令詳解
3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...