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

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

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

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

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

решение1

Переменные указываются по имени, как в var, а не $varкак awk. $nотносится к nth поле: $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}'

Связанный контент