awk
是一個強大的文字處理工具,最初用於 Unix 系統,現在也可以在類 Unix 系統(如 Linux 和 macOS)上使用。它允許你執行復雜的文字處理任務而不需要編寫完整的程式。下面是一些基本概念以及 awk
的使用規則:
基本語法
awk
命令的基本形式是:
awk 'pattern {action}' [file ...]
pattern
定義了一個模式,用來匹配輸入行。{action}
是當模式匹配成功時執行的一系列命令。[file ...]
是需要處理的一個或多個檔名。如果沒有指定檔案,則awk
從標準輸入讀取資料。
常用選項
-F fs
設定欄位分隔符為fs
。-v var=val
在awk
程式中定義變數var
並賦值為val
。-f script-file
指定一個指令碼檔案來代替直接在命令列上寫awk
程式。
內建變數
awk
提供了許多內建變數,用於簡化文字處理任務:
ARGV
包含命令列引數。ARGC
包含命令列引數的數量。ARGIND
當前正在處理的檔案在ARGV
中的位置。FILENAME
當前輸入檔案的名字。NR
記錄號,即處理了多少行。NF
欄位數,即當前行有多少個欄位。RS
記錄分隔符,預設為換行符。FS
欄位分隔符,預設為空白字元(空格或製表符)。OFS
輸出欄位分隔符,預設為空格。ORS
輸出記錄分隔符,預設為換行符。
示例
- 列印第二列:
awk '{print $2}' file
- 設定欄位分隔符為逗號,並列印第一列:
awk -F, '{print $1}' file
- 統計檔案中的行數:
awk 'END{print NR}' file
- 統計每行的單詞數:
awk '{print NF}' file
- 統計所有數字的總和(假設所有行都是數字):
awk '{sum += $1} END{print sum}' file
複雜操作
awk
還支援條件語句、迴圈、函式定義等,可以實現非常複雜的邏輯。例如:
awk '
BEGIN { sum = 0 }
{
if ($1 ~ /^[0-9]+$/) # 如果第一列是數字
sum += $1
}
END {
print "Total:", sum
}' file
以上只是一個簡要介紹,awk
的功能遠不止這些。為了更深入地學習 awk
,建議查閱官方文件或者相關書籍。