當我希望 awk 列印變數時,為什麼它會列印整行?

當我希望 awk 列印變數時,為什麼它會列印整行?

當我輸入:

echo "foo bar" | gawk -v var="content" '{print $var}'

我預計輸出為content.為什麼foo bar

答案1

變數按名稱引用,如 in var,而不是$varin awk$n指的是n 場地$1對於第一個字段,$2對於第二個...或整個記錄n== 0 ($0是完整記錄)。

這些不一定是字面數字。您可以使用$(1+1)$variable。如果variable包含1,則將$variable是第一個欄位。常用的是$NF最後一個欄位(NF是包含欄位數量的特殊變數)。

如果像您的範例一樣,變數不包含數字,那麼非數被理解為0。

因此var="content"; print $var, 與 相同var=0; print $var,因此與 相同print $0,即列印整個記錄。

你在這裡想要的是:

echo "foo bar" | gawk -v var="content" '{print var}'

相關內容