如何編寫AWK命令和腳本

命令,語法和示例

awk命令是處理或分析文本文件的強大方法 - 特別是按行(行)和列組織的數據文件。

簡單的awk命令可以從命令行運行。 更複雜的任務應該作為awk程序(所謂的awk腳本)寫入文件。

awk命令的基本格式如下所示:

awk'pattern {action}'輸入文件>輸出文件

這意味著:獲取輸入文件的每一行; 如果行包含模式,則將行為應用於行並將結果行寫入輸出文件。 如果省略了該模式,則該操作將應用於所有行。 例如:

awk'{print $ 5}'table1.txt> output1.txt

該語句採用每行第5列的元素,並將其作為輸出文件“output.txt”中的一行寫入。 變量'$ 4'是指第二列。 同樣,您可以使用$ 1,$ 2,$ 3等訪問第一列,第二列和第三列。默認情況下,列被假設為由空格或製表符分隔(所謂的空格)。 所以,如果輸入文件“table1.txt”包含這些行:

1,Justin Timberlake,標題545,售價$ 7.30 2,Taylor Swift,標題723,售價$ 7.90 3,Mick Jagger,標題610,售價7.90美元4,Lady Gaga,標題118,售價$ 7.30 5,Johnny Cash,標題482,售價$ 6.50 6,Elvis Presley,標題335,售價$ 7.30 7,John Lennon,標題271,售價$ 7.90 8,Michael Jackson,標題373,售價$ 5.50

然後該命令會將以下行寫入輸出文件“output1.txt”中:

545,723,610,118,482,335,271,373,

如果列分隔符不是空格或製表符(如逗號),則可以在awk語句中指定該分隔符,如下所示:

awk -F,'{print $ 3}'table1.txt> output1.txt

如果列被認為用逗號分隔,這將從每行的第3列中選擇元素。 因此,在這種情況下,輸出將是:

標題545標題723標題610標題118標題482標題335標題271標題373

大括號內的語句列表('{','}')被稱為塊。 如果將條件表達式放在塊的前面,則塊中的語句只有在條件為真時才會執行。

awk'$ 7 ==“\ $ 7.30”{print $ 3}'table1.txt

在這種情況下,條件是$ 7 ==“\ $ 7.30”,這意味著第7列的元素等於7.30美元。 美元符號前面的反斜杠用於防止系統將$ 7解釋為變量,而是從字面上採用美元符號。

所以這個awk語句在第7列的每行“$ 7.30”的第3列處打印出元素。

您也可以使用正則表達式作為條件。 例如:

awk'/ 30 / {print $ 3}'table1.txt

兩個斜線('/')之間的字符串是正則表達式。 在這種情況下,它只是字符串“30”。 這意味著如果一行包含字符串“30”,則係統在該行的第三列處輸出該元素。 上例中的輸出是:

Timberlake,Gaga,Presley,

如果表格元素是數字,awk可以對它們進行計算,如下例所示:

awk'{print($ 2 * $ 3)+ $ 7}'

除了訪問當前行元素的變量($ 1,$ 2等)之外,還有變量$ 0,它表示完整的行(行),變量NF表示字段數。

您也可以在此示例中定義新變量:

awk'{sum = 0; for(col = 1; col <= NF; col ++)sum + = $ col; 印數 }“

這將計算並打印每行所有元素的總和。

Awk語句經常與sed命令結合使用。