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 $var
in awk
. $n
bezieht sich auf das n
th Feld: $1
für das erste Feld, $2
für das zweite ... oder den gesamten Datensatz für n
== 0 ( $0
ist der vollständige Datensatz).
Das müssen keine wörtlichen Zahlen sein. Sie können $(1+1)
oder verwenden $variable
. Wenn variable
enthält 1
, $variable
ist das erste Feld. Ein häufig verwendetes ist $NF
das letzte Feld ( NF
ist 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 $var
ist dasselbe wie var=0; print $var
und 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}'