1匙赞、awk命令簡介
awk命令是一種處理文本文件的語言,是一個強大的文本分析工具妖碉。
awk命令也可以叫awk編程涌庭,能夠識別非制表符的空格,可以解決cut命令解決不了的問題欧宜。
awk命令非常復雜坐榆,本章節(jié)我們只介紹部分常用的功能。
2冗茸、awk命令格式
命令格式:awk '條件1{動作1} 條件2{動作2}…' 文件名
條件:
一般使用關系表達式作為條件
x > 10 判斷變量x是否大于10席镀;
x >= 10 判斷變量x是否大于等于10;
x <= 10 判斷變量x是否小于等于10夏漱;
動作:
格式化輸出豪诲;
流程控制語句;
3挂绰、awk命令使用說明
創(chuàng)建成績單文件score.txt屎篱,內(nèi)容如下:
3.1、提取成績單中第2列和第4列
執(zhí)行命令:
awk '{printf $2 "\t" $4 "\n"}' score.txt
命令中$2代表第2列葵蒂,$4代表第4列交播。命令中沒有加入任何條件,所以針對的是文件中的每一行數(shù)據(jù)践付。對每一行數(shù)據(jù)打印第2列和第4列秦士。命令執(zhí)行結果如下圖所示:
3.2、提取按空格分隔的內(nèi)容
使用 df -h 命令永高,查看空間占用情況隧土。命令輸出內(nèi)容如下圖所示:
df命令輸出結果是以空格分隔的提针,而非Tab鍵。
執(zhí)行命令次洼,提取輸出結果的中FileSystem列和Mounted列:
df -h | awk '{printf $1 "\t" $6 "\n"}'
命令執(zhí)行結果如下所示:
執(zhí)行以下命令也可以輸出同樣的結果:
df -h | awk '{print $1 "\t" $6}'
兩條命令區(qū)別:
- printf 不可以自動換行关贵,需要在行尾增加換行符;
- print 可以在末尾自動換行卖毁;
- 在Linux系統(tǒng)中沒有print命令只有printf命令,在awk命令中兩個都支持落萎;
3.3亥啦、BEGIN
注意:BEGIN必須是大寫,它是一個條件练链。它的作用是強制第一個執(zhí)行他后面的語句翔脱。
執(zhí)行命令:
awk 'BEGIN{printf "Test Begin \n"}{printf $2 "\t" $4 "\n"}' score.txt
執(zhí)行結果如下圖所示:
BEGIN{printf "Test Begin \n"} 會在輸出文件內(nèi)容第2列和第4列之前輸出一句話Test Begin。
3.4媒鼓、END
同BEGIN相類似届吁,END是強制最后一個執(zhí)行它后面的語句。
同時指定BEGIN和END绿鸣,執(zhí)行命令:
awk 'BEGIN{printf "Test Begin \n"}{printf $2 "\t" $4 "\n"}END{printf "Test End \n"}' score.txt
輸出結果如下圖所示:
3.5疚沐、FS內(nèi)置變量
可以在BEGIN中通過FS內(nèi)置變量指定分隔符。
FS=':'潮模,表示指定:為分隔符亮蛔。
cat /etc/passwd | grep "/bin/bash"
查看passwd文件中可登陸用戶信息,輸出結果如下圖所示:
指定分隔符按照:分隔沼侣,將結果輸出第一列和第三列豆混,執(zhí)行命令:
cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"} {printf $1 "\t" $3 "\n"}'
命令執(zhí)行結果如下圖所示:
3.6寝殴、關系運算符
篩選出來語文成績大于等于90的同學,輸出其名稱和語文成績芬探。執(zhí)行命令:
cat score.txt | awk '$3>=90{printf $2 "\t" $3 "\n"}'
命令執(zhí)行結果,如下圖所示:
說明:awk命令還有其他的功能厘惦,其功能非常強大偷仿。專門有書籍介紹awk命令,有興趣的可以自行摸索使用方法绵估。