使用案例 Linux awk命令常見使用案例

2021-10-16 04:26:33 字數 3923 閱讀 6618

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

mail

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表示所有列

[root@zcwyou ~]# awk -f: '$1=="root"' /etc/passwd
2.9 排除字元列印/etc/passwd的內容,除去帶有root的行

[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...