awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk內置變量
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數
FS 設置輸入域分隔符,等價于命令行 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
$0變量是指整條記錄。$1表示當前行的第一個域,$2表示當前行的第二個域,......以此類推。
$NF是number finally,表示最后一列的信息,跟變量NF是有區別的,變量NF統計的是每行列的總數
常用的命令展示
awk擅長列輸出
搜索/etc/passwd有root關鍵字的所有行
awk '/root/' /etc/passwd
【這種是pattern的使用,匹配了pattern(這里是root)的行才會執行action(沒有指定action,默認輸出每行的內容)】搜索/etc/passwd有root關鍵字的所有行,并顯示對應的shell
awk -F: '/root/ {print $7}' /etc/passwd
統計/etc/passwd:文件名,每行的行號,每行的列數,對應的完整行內容:
awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
使用printf替代print,可以讓代碼更加簡潔,易讀
awk -F: '{printf ("filename:%10s, linenumber:%3s,column:%3s,content:%3fn",FILENAME,NR,NF,$0)}' /etc/passwd
打印/etc/passwd/的第二行信息
awk -F: 'NR==2{print "filename: "FILENAME, $0}' /etc/passwd
awk的過濾使用方法
ls -lF | awk '/^d/'
指定特定的分隔符,查詢第一列
awk -F ":" '{print $1}' /etc/passwd