Я пытаюсь использовать разные вещи с awk
.
Во-первых, использование некоторых переменных оболочки, которые здесь показывают, как их использовать.
Во-вторых, как использовать переменную оболочки для сопоставления с шаблоном, который здесь указывает на использование оператора ~
.
Наконец, я хочу использовать какой-то или оператор для сопоставления двух переменных оболочки.
Собираем все вместе в foo.sh
:
#!/bin/bash
START_TEXT="My start text"
END_TEXT="My end text"
awk -v start=$START_TEXT -v end=$END_TEXT '$0 ~ start || $0 ~ end { print $2 }' myfile
Который не запускается:
$ ./foo.sh
awk: fatal: cannot open file `text' for reading (No such file or directory)
Так что я думаю, что оператор OR (||
) плохо работает с оператором регулярных выражений ~
.
Я догадывался, что мне может понадобиться сделать операцию ИЛИ внутри регулярного выражения.
Итак, я попробовал эти два:
awk -v start=$START_TEXT -v end=$END_TEXT '$0~/start|end/ { print $2 }' myfile
awk -v start=$START_TEXT -v end=$END_TEXT '$0~start|end { print $2 }' myfile
С таким же неудавшимся результатом.
И даже эта вещь терпит неудачу ...
awk -v start=$START_TEXT '$0~start { print $2 }' myfile
Так что я делаю что-то действительно не так ...
Любые намеки, как этого добиться?