從零開(kāi)始學(xué)習(xí)Linux(四十三):Shell編程之a(chǎn)wk命令

1、awk命令簡(jiǎn)介

awk命令是一種處理文本文件的語(yǔ)言,是一個(gè)強(qiáng)大的文本分析工具。
awk命令也可以叫awk編程,能夠識(shí)別非制表符的空格,可以解決cut命令解決不了的問(wèn)題。
awk命令非常復(fù)雜,本章節(jié)我們只介紹部分常用的功能。

2、awk命令格式

命令格式:awk '條件1{動(dòng)作1} 條件2{動(dòng)作2}…' 文件名

條件:
一般使用關(guān)系表達(dá)式作為條件
x > 10 判斷變量x是否大于10;
x >= 10 判斷變量x是否大于等于10;
x <= 10 判斷變量x是否小于等于10;

動(dòng)作:
格式化輸出;
流程控制語(yǔ)句;

3、awk命令使用說(shuō)明

創(chuàng)建成績(jī)單文件score.txt,內(nèi)容如下:

3.1、提取成績(jī)單中第2列和第4列

執(zhí)行命令:

awk '{printf $2 "\t" $4 "\n"}' score.txt

命令中$2代表第2列,$4代表第4列。命令中沒(méi)有加入任何條件,所以針對(duì)的是文件中的每一行數(shù)據(jù)。對(duì)每一行數(shù)據(jù)打印第2列和第4列。命令執(zhí)行結(jié)果如下圖所示:

3.2、提取按空格分隔的內(nèi)容

使用 df -h 命令,查看空間占用情況。命令輸出內(nèi)容如下圖所示:

df命令輸出結(jié)果是以空格分隔的,而非Tab鍵。

執(zhí)行命令,提取輸出結(jié)果的中FileSystem列和Mounted列:

df -h | awk '{printf $1 "\t" $6 "\n"}'

命令執(zhí)行結(jié)果如下所示:

執(zhí)行以下命令也可以輸出同樣的結(jié)果:

df -h | awk '{print $1 "\t" $6}'

兩條命令區(qū)別:

  • printf 不可以自動(dòng)換行,需要在行尾增加換行符;
  • print 可以在末尾自動(dòng)換行;
  • 在Linux系統(tǒng)中沒(méi)有print命令只有printf命令,在awk命令中兩個(gè)都支持;
3.3、BEGIN

注意:BEGIN必須是大寫(xiě),它是一個(gè)條件。它的作用是強(qiáng)制第一個(gè)執(zhí)行他后面的語(yǔ)句。

執(zhí)行命令:

awk 'BEGIN{printf "Test Begin \n"}{printf $2 "\t" $4 "\n"}' score.txt

執(zhí)行結(jié)果如下圖所示:

BEGIN{printf "Test Begin \n"} 會(huì)在輸出文件內(nèi)容第2列和第4列之前輸出一句話Test Begin。

3.4、END

同BEGIN相類(lèi)似,END是強(qiáng)制最后一個(gè)執(zhí)行它后面的語(yǔ)句。

同時(shí)指定BEGIN和END,執(zhí)行命令:

awk 'BEGIN{printf "Test Begin \n"}{printf $2 "\t" $4 "\n"}END{printf "Test End \n"}' score.txt

輸出結(jié)果如下圖所示:

3.5、FS內(nèi)置變量

可以在BEGIN中通過(guò)FS內(nèi)置變量指定分隔符。
FS=':',表示指定:為分隔符。

cat /etc/passwd | grep "/bin/bash"

查看passwd文件中可登陸用戶(hù)信息,輸出結(jié)果如下圖所示:

指定分隔符按照:分隔,將結(jié)果輸出第一列和第三列,執(zhí)行命令:

cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"} {printf $1 "\t" $3 "\n"}'

命令執(zhí)行結(jié)果如下圖所示:

3.6、關(guān)系運(yùn)算符

篩選出來(lái)語(yǔ)文成績(jī)大于等于90的同學(xué),輸出其名稱(chēng)和語(yǔ)文成績(jī)。執(zhí)行命令:

cat score.txt | awk '$3>=90{printf $2 "\t" $3 "\n"}'

命令執(zhí)行結(jié)果,如下圖所示:

說(shuō)明:awk命令還有其他的功能,其功能非常強(qiáng)大。專(zhuān)門(mén)有書(shū)籍介紹awk命令,有興趣的可以自行摸索使用方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容