Почему awk печатает всю строку, когда я хочу, чтобы она печатала переменную?

24

Когда я печатаю:

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

Я ожидаю, что результат будет content. Почему это foo bar?

nicoco
источник
8
Попробуйте удалить $из $ var
taliezin
Верно. Я запутался с синтаксисом bash ...
nicoco
Это хороший вопрос, и хотя ответ показывает, что он $был не на своем месте, я не уверен, что он должен быть закрыт как опечатка. Я видел несколько таких недавно, поэтому, возможно, нам нужен канонический
roaima

Ответы:

45

На переменные ссылаются по имени как в var, а не $varв awk. $nссылается на поле nth : для первого поля, для второго ... или всей записи для == 0 ( полная запись).$1$2n$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}'
Стефан Шазелас
источник