AWK - Как фильтровать, используя аргумент командной строки ($ 1) - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть скрипт со следующей строкой:

RHEL7.5> cat myScript.sh
...
awk -F":" '/^(EASYDOC)+/ {print $2}' /etc/oratab
...
RHEL7.5>

Что мне нужно, так это заменить слово «EASYDOC» аргументом командной строки ($ 1), чтобы оно выполнялось как «myScript.sh EASYDOC», и lettin EASYDOC заменяет ссылку на переменную шаблона в строке awk.

Например:

awk -F":" '/^(something lets recognize $1 as arg)+/ {print $2}' /etc/oratab

было бы желательно. Заранее спасибо. Нестор.

1 Ответ

0 голосов
/ 03 сентября 2018

Во-первых, чтобы передать переменную оболочки в ваш скрипт awk, используйте -v:

awk -F":" -v arg="$1" ...

Во-вторых, вы не сможете использовать синтаксис регулярных выражений /.../ для чего-либо, кроме строковой константы, поэтому вместо этого используйте оператор ~ с $0:

awk -F":" -v arg="$1" '$0 ~ "^(something lets recognize " arg " as arg)+" { print $2 }'

например:

$ var=foo

$ cat file
something lets recognize foo as arg:shut the door:the color is red

$ awk -F":" -v arg=$var '$0 ~ "^(something lets recognize " arg " as arg)+" { print $2 }' file
shut the door
...