awk的命令是一種處理或分析文本文件的強(qiáng)大方法,特別是按行和列組織的數(shù)據(jù)文件。
可以從命令行運(yùn)行簡(jiǎn)單的awk命令。更復(fù)雜的任務(wù)應(yīng)該作為awk程序(所謂的awk腳本)寫入文件。
awk命令的基本格式如下:
awk 'pattern {action}' input-file > output-file
這意味著:取輸入文件的每一行; 如果該行包含該模式,則將該操作應(yīng)用于該行并將結(jié)果行寫入輸出文件。如果省略該模式,則該操作將應(yīng)用于所有行。例如:
linuxidc@ubuntu:~/linuxidc.com$ awk '{ print $5 }' linuxidc.txt > linuxmi.txt
該語(yǔ)句獲取每行第5列的元素,并將其作為一行寫入輸出文件“output.txt”中。變量'$4'指的是第四列。類似地,您可以使用$1,$2,$3等訪問(wèn)第一列,第二列和第三列。默認(rèn)情況下,假定列由空格或制表符(所謂的空格)分隔。因此,如果輸入文件“l(fā)inuxidc.txt”包含以下行:
1, linuxidc com, Title 599, Price $9.30
2, ninhao linuxidc, Title 761, Price $5.90
3, naike xie, Title 880, Price $9.10
4, Lady Gaga, Title 198, Price $1.30
5, Johnny Cash, Title 582, Price $6.50
6, Elvis Presley, Title 370, Price $9.30
7, John Lennon, Title 571, Price $8.90
8, Michael Jackson, Title 673, Price $7.50
9, linuxidc com, Title 585, Price $1.80
然后該命令將以下行寫入輸出文件“l(fā)inuxmi.txt”:
linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt
599,
761,
880,
198,
582,
370,
571,
673,
585,
如果列分隔符不是空格或制表符(例如逗號(hào)),則可以在awk語(yǔ)句中指定,如下所示:
linuxidc@ubuntu:~/linuxidc.com$ awk -F, '{ print $3 }' linuxidc.txt > linuxmi.txt
如果認(rèn)為列被逗號(hào)分隔,這將從每行的第3列中選擇元素。因此,在這種情況下,輸出將是:
linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt
Title 599
Title 761
Title 880
Title 198
Title 582
Title 370
Title 571
Title 673
Title 585
大括號(hào)內(nèi)的語(yǔ)句列表('{','}')稱為塊。如果將條件表達(dá)式放在塊前面,則只有條件為真時(shí)才會(huì)執(zhí)行塊內(nèi)的語(yǔ)句。
awk '$7=="$7.30" { print $3 }' linuxidc.txt
在這種情況下,條件是$7=="$7.30",這意味著第7列的元素等于$7.30。美元符號(hào)前面的反斜杠用于阻止系統(tǒng)將$7解釋為變量,而是從字面上理解美元符號(hào)。
因此,這個(gè)awk語(yǔ)句打印出每行第3列的元素,第7列的“$7.30”。
您還可以使用正則表達(dá)式作為條件。例如:
linuxidc@ubuntu:~/linuxidc.com$ awk '$7=="$7.30" { print $3 }' linuxidc.txt
兩個(gè)斜杠('/')之間的字符串是正則表達(dá)式。在這種情況下,它只是字符串“30”。這意味著如果一行包含字符串“30”,系統(tǒng)將在該行的第3列打印出該元素。上例中的輸出將是:
linuxidc@ubuntu:~/linuxidc.com$ awk '/30/ { print $3 }' linuxidc.txt
com,
Gaga,
Presley,
如果表元素是數(shù)字,awk可以在它們上運(yùn)行計(jì)算,如下例所示:
linuxidc@ubuntu:~/linuxidc.com$ awk '{ print ($2 * $3) + $7 }' linuxidc.com.txt
除了訪問(wèn)當(dāng)前行元素($1,$2等)的變量之外,還有變量$0表示完整行(行),變量NF表示字段數(shù)。
您還可以在此示例中定義新變量:
linuxidc@ubuntu:~/linuxidc.com$ awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }' linuxidc.com.txt
這將計(jì)算并打印每行所有元素的總和。
awk語(yǔ)句經(jīng)常與sed命令結(jié)合使用。
1.《awk命令 如何編寫awk命令和腳本》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《awk命令 如何編寫awk命令和腳本》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/keji/346677.html