awk '{$2=$5=\"\"}1' file
| 片段 | 含義 |
|---|---|
{$2=$5=\"\"} | 動作:將第 2、5 欄設為空字串(實際保留分隔符,輸出時會出現連續空欄) |
1 | 模式:常數 1 為真,觸發預設動作 {print $0}(列印整行) |
awk 'pattern {action}' file
# 等價於
while (getline > 0) {
if (pattern) action
}
pattern → 對每行執行 action。action → 預設 {print $0}。pattern 為非零常數/變數/表達式結果 → 視為真。1 而非 print?1 是最短的「真」模式,觸發預設列印。常見變體:
awk '1' file ≡ cat fileawk 'NF' file → 僅列印非空行(NF=欄位數)awk '/regex/' file → 列印匹配行輸入:
a b c d e f
1 2 3 4 5 6
命令:awk '{$2=$5=\"\"}1' file
輸出:
a c d f
1 3 4 6
第 2、5 欄變空,但分隔符(預設空白)保留,視覺上欄位「消失」。若需真正刪除欄位需重組 $0 或使用 cut。
# 方法 1:重組 $0(依賴 OFS)
awk '{$2=$5=\"\"; $1=$1}1' file
# 方法 2:用輸出分隔符控制
awk -v OFS=, '{$2=$5=\"\"; print}' file
# 方法 3:切片重組(最穩健)
awk '{for(i=1;i<=NF;i++) if(i!=2 && i!=5) printf \"%s%s\", $i, (i==NF?ORS:OFS)}' file
awk '1' 是「列印所有行」的極簡慣用語;配合 {...} 修改欄位後再用 1 觸發列印,是單行腳本常見模式。理解 pattern-action 模型,能寫出更簡潔高效的 awk 程式。