Внешняя переменная в awk
У меня есть script, в котором фрагмент script:
x=3
awk '$2=$x{print $1}' infile
Внешняя переменная x
,
но он вызывает ошибку в awk
Итак, в этой ситуации, как сделать awk
успешно запущен?
Ответы
Ответ 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