Внешняя переменная в 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
Ответ 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