- AWK 教程
- AWK - 首頁
- AWK - 概述
- AWK - 環境
- AWK - 工作流程
- AWK - 基本語法
- AWK - 基本示例
- AWK - 內建變數
- AWK - 運算子
- AWK - 正則表示式
- AWK - 陣列
- AWK - 控制流
- AWK - 迴圈
- AWK - 內建函式
- AWK - 使用者自定義函式
- AWK - 輸出重定向
- AWK - 美化輸出
- AWK 有用資源
- AWK - 快速指南
- AWK - 有用資源
- AWK - 討論
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 個字元,則比較結果為真,並且該行將被列印。
廣告