Когда я печатаю:
echo "foo bar" | gawk -v var="content" '{print $var}'
Я ожидаю, что результат будет content
. Почему foo bar
?
решение1
Переменные указываются по имени, как в var
, а не $var
как awk
. $n
относится к n
th поле: $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}'