HOME/Articles/

從初學者進步到能夠靈活使用 `awk`

Article Outline

Fleet

當然可以!這裡是使用 awk 的基本介紹,將逐步介紹並逐步增加複雜度,讓你能夠

步驟 1: 基本輸出

首先,我們使用 echoawk 來處理一串文字,並將其全部輸出:

echo "Hello World" | awk '{print}'

這條命令會將 "Hello World" 輸出到終端。

步驟 2: 選擇性列印字段

使用 awk 的字段選擇功能,從一行文本中選擇並列印特定字段。awk 預設以空白作為字段分隔符:

echo "Hello World" | awk '{print $2}'

這會列印 "World"。

步驟 3: 更改字段分隔符

使用 -F 選項來指定字段分隔符。例如,使用冒號分隔:

echo "name:John" | awk -F':' '{print $2}'

這會列印 "John"。

步驟 4: 使用條件過濾

僅在條件成立時輸出行。例如,僅當第二字段等於 "World" 時:

echo -e "Hello World\nHello There" | awk '$2 == "World" {print}'

這將只輸出 "Hello World"。

步驟 5: 列印行號

列印每行的行號及其內容:

echo -e "Hello World\nHello There" | awk '{print NR, $0}'

NRawk 中的內建變量,代表當前的行號。

步驟 6: 累加字段值

對一列數字進行累加。例如,計算總和:

echo -e "1\n2\n3\n4" | awk '{sum += $1} END {print sum}'

這會在結束時輸出 "10"。

步驟 7: 格式化輸出

使用 printf 來格式化輸出,例如,格式化貨幣:

echo "1000" | awk '{printf "$%.2f\n", $1}'

這將輸出 "$1000.00"。

步驟 8: 處理多列數據

假設有多列數據,計算平均值:

echo -e "10 20\n30 40\n50 60" | awk '{sum1 += $1; sum2 += $2} END {print "Average 1:", sum1/NR; print "Average 2:", sum2/NR}'

這將計算兩列的平均值。

步驟 9: 使用外部變數

將 shell 變數傳入 awk

threshold=20
echo -e "10\n20\n30" | awk -v thresh="$threshold" '$1 > thresh {print}'

這將只列印大於 20 的數字,即 "30"。

步驟 10: 多個條件和模式

組合多個條件,並針對每個條件進行不同的處理:

echo -e "Apple 1\nBanana 2\nCherry 3" | awk '$2 == 1 {print "One", $1} $2 == 2 {print "Two", $1} $2 > 2 {print "Many", $1}'

這會根據第二字段的值來改變

輸出。

以上步驟逐漸引導你了解 awk 的基本功能到更複雜的使用情況,希望這對你有幫助!