AWK - 基本示例



本章描述了幾個有用的 AWK 命令及其相應的示例。考慮一個名為 marks.txt 的文字檔案,其內容如下所示:

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

列印列或欄位

您可以指示 AWK 只打印輸入欄位中的某些列。以下示例演示了這一點:

示例

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

執行此程式碼後,您將得到以下結果:

輸出

Physics   80
Maths     90
Biology   87
English   85
History   89

marks.txt 檔案中,第三列包含科目名稱,第四列包含特定科目獲得的分數。讓我們使用 AWK print 命令列印這兩列。在上面的示例中,$3 和 $4 分別代表輸入記錄中的第三個和第四個欄位。

列印所有行

預設情況下,AWK 列印所有與模式匹配的行。

示例

[jerry]$ awk '/a/ {print $0}' marks.txt

執行此程式碼後,您將得到以下結果:

輸出

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

在上面的示例中,我們正在搜尋模式 a。當模式匹配成功時,它將執行主體塊中的命令。在沒有主體塊的情況下,將採取預設操作,即列印記錄。因此,以下命令產生相同的結果:

示例

[jerry]$ awk '/a/' marks.txt

按模式列印列

當模式匹配成功時,AWK 預設列印整個記錄。但是您可以指示 AWK 只打印某些欄位。例如,以下示例在模式匹配成功時列印第三和第四個欄位。

示例

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

執行此程式碼後,您將得到以下結果:

輸出

Maths    90
Biology  87
English  85
History  89

按任意順序列印列

您可以按任意順序列印列。例如,以下示例先列印第四列,然後列印第三列。

示例

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

執行上述程式碼後,您將得到以下結果:

輸出

90   Maths
87   Biology
85   English
89   History

計數和列印匹配的模式

讓我們來看一個示例,您可以計算並列印模式匹配成功的行數。

示例

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

執行此程式碼後,您將得到以下結果:

輸出

Count = 4

在這個例子中,當模式匹配成功時,我們遞增計數器的值,並在 END 塊中列印此值。請注意,與其他程式語言不同,無需在使用變數之前宣告它。

列印超過 18 個字元的行

讓我們只打印包含超過 18 個字元的行。

示例

[jerry]$ awk 'length($0) > 18' marks.txt

執行此程式碼後,您將得到以下結果:

輸出

3) Shyam   Biology   87
4) Kedar   English   85

AWK 提供一個內建的 length 函式,該函式返回字串的長度。$0 變數儲存整行,在沒有主體塊的情況下,將採取預設操作,即列印操作。因此,如果一行超過 18 個字元,則比較結果為真,並且該行將被列印。

廣告
© . All rights reserved.