Warum druckt awk die ganze Zeile, wenn ich eine Variable drucken möchte?

Warum druckt awk die ganze Zeile, wenn ich eine Variable drucken möchte?

Wenn ich tippe:

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

Ich erwarte eine Ausgabe content. Warum ist sie foo bar?

Antwort1

Variablen werden mit ihrem Namen referenziert, wie in var, nicht $varin awk. $nbezieht sich auf das nth Feld: $1für das erste Feld, $2für das zweite ... oder den gesamten Datensatz für n== 0 ( $0ist der vollständige Datensatz).

Das müssen keine wörtlichen Zahlen sein. Sie können $(1+1)oder verwenden $variable. Wenn variableenthält 1, $variableist das erste Feld. Ein häufig verwendetes ist $NFdas letzte Feld ( NFist die spezielle Variable, die die Anzahl der Felder enthält).

Wenn die Variable, wie in Ihrem Beispiel, keine Zahl enthält,Nicht-Zahlwird als 0 verstanden.

Also var="content"; print $varist dasselbe wie var=0; print $varund somit dasselbe wie , d. h. print $0, es wird der gesamte Datensatz gedruckt.

Was Sie hier wollen, ist:

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

verwandte Informationen