Intereting Posts

Как вставить переменные bash в awk?

  1. Как вставить переменные bash в awk (например, мне нужно сделать в некоторых для цикла – вот так: в первой итерации используйте awk для поиска строки по первому столбцу, затем по второму столбцу и т. Д. С использованием разностного шаблона из переменных bash в AWK)

или

  1. найти простой способ сделать шаблон вообще (как строку) и получить его в awk как аргумент.

Попытка вставить переменные bash в awk –

У меня есть журнал –

$ cat > log test1 test2 ahaha hahah 

я делаю

 $ cat log | awk '$1~/test1|test2/ {print }' test1 test2 

все нормально

Мне нужно вставить переменные bash в awk

 $ a=test1 $ b=test2 

то я пытаюсь вставить

 $ cat log | awk 'BEGIN{a;b} $1~/a|b/ {print }' ahaha hahah $ cat log | awk -va=test1 -vb=test2 '$1~/a|b/ {print }' ahaha hahah 

Как сделать все patern как строку и получить ее awk как аргумент –

 $ p='$1~/test1|test2/ {print }' $ cat log | awk p # get test1 # get test2 

Передайте шаблоны как переменные в awk и явно сравните с использованием динамических шаблонов (т. Е. Сопоставления с шаблонами в строках) …

 awk -v pat="$a|$b" '$1 ~ pat' log 

или

 awk -va="$a" -vb="$b" '$1 ~ a "|" b ' log 

Примечание. Вы не можете использовать статические шаблоны /…/ (или только с помощью грязного цитирования / экранирования).

Awk не расширяет переменные внутри /.../ .

Но

 $ cat log | awk -va=test1 -vb=test2 '$1 ~ a || $1 ~ b {print }' 

а также

 $ p='$1~/test1|test2/ {print }' $ cat log | awk "$p" 

должен работать (непроверенный)

Заполните переменные за пределами области awk (закрыть и снова открыть):

 cat log | awk '$1~/'${a}'|'${b}'/ {print }'