#variables #command-line #awk
#переменные #командная строка #awk
Вопрос:
awk -F, -f awkfile.awk -v mysearch="search term"
Я пытаюсь использовать приведенную выше команду из терминала и использовать поиск в качестве поискового запроса в awk
программе. Моя awk
программа работает отлично, фактически назначая поисковый запрос внутри программы, но мне интересно, как заставить переменную search использоваться?
пример строки, в которой она используется if($j ~ /mysearch/){
, это не работает при настройке условия поиска, но фактически выполняет поиск строки mysearch
.
Ответ №1:
Просто удалите косые черты:
$j ~ mysearch
Ответ №2:
Это не идеально, но я предлагаю написать скрипт bash, который принимает поисковый запрос, заменяет этот поисковый запрос в скрипте awk, а затем запускает скрипт. Например:
$ cat dosearch.sh
sed "s/XXX/$1/" awktemplate.awk > awkfile.awk
awk -f awkfile.awk data.txt
$ cat awktemplate.awk
{
j = 1
if ($j ~ /XXX/) {
# Do something, such as
print "Found:", $0
}
}
$ cat data.txt
foo here
bar there
xyz everywhere
$ ./dosearch.sh foo
Found: foo here
$ ./dosearch.sh bar
Found: bar there
В приведенном выше примере шаблон awk содержит «XXX» в качестве поискового запроса, скрипт bash заменяет этот поисковый запрос первым параметром, затем вызывает awk в измененном скрипте.
Ответ №3:
$ cat input
tinky-winky
dipsy
laa-laa
noo-noo
po
$ teletubby='po'
$ awk -v "regexp=$teletubby" '$0 ~ regexp' input
po
Обратите внимание, что в переменную оболочки может попасть что угодно,
даже полноценное регулярное выражение, например ^d.*y
. Просто убедитесь, что используете одинарные кавычки
, чтобы оболочка не выполняла никакого расширения.