Подтвердить что ты не робот

Внешняя переменная в awk

У меня есть script, в котором фрагмент script:

x=3
awk '$2=$x{print $1}' infile

Внешняя переменная x,

но он вызывает ошибку в awk

Итак, в этой ситуации, как сделать awk успешно запущен?

4b9b3361

Ответ 1

Вы передаете внешнюю переменную для использования в awk с опцией -v:

some_variable=3
awk -v x=$some_variable '$2 == x {print $1}' infile

Также обратите внимание, что вам нужно изменить свой код от $2=$x до $2 == x

  • Используйте == вместо =: последним является назначение
  • Не префикс обычных переменных $ внутри awk script.

Кроме того: вам нужно указать один -v для каждой переменной, которую вы хотите передать, например:

var1=2
var2=4
awk -v x=$var1 -v y=$var2 '$2 == x {print y " " $1}' infile

Ответ 2

awk имеет параметр -v для этой цели или, как упоминает @nevelis, просто используйте двойные кавычки:

awk -v x=3 ' $2==x {print $1} '

Ответ 3

GAWK также поддерживает следующий синтаксис:

awk '$2 == x {print $1}' x=3 infile

Интересное использование:

awk '$2 == x {print $1}' x=3 infile1 x=10 infile2

в этом случае x будет равно 3 для infile1 и равно 10 для infile2

Ответ 4

Использование "" - bash не будет заменять одинарные кавычки.

Например:

x = 3 awk "\ $2 = $x {print\$1}" infile