Допустимая команда linux отклонена в скрипте awk

Команда тестирования:

$ if echo 'abcd' | grep  -q '[a-zA-Z]'; then echo 'alpha'; fi

С терминала я получаю «альфа», как и ожидалось.

Но когда я помещаю команду в текстовый файл akpl.awk и запускаю с

$ awk -f akpl.awk sppl.txt

, я получаю сообщение об ошибке.

Я пытаюсь подсчитать алфавитные записи в поле 5 каждой строки в sppl.txt, поэтому «abcd» обычно заменяется на $ 5

Кстати, это разумный способ проверки строк с помощью регулярных выражений узоры?

0
задан 16 August 2019 в 10:16

1 ответ

Команды в awk сценарии должны быть допустимыми командами awk, а не допустимыми командами оболочки.

, Хотя это действительно имеет механизмы для выполнения внешних команд через эти system() функция или использование getline от канала или совместно обрабатывает, они используются скорее редко. Для простого текста, обрабатывающего задачи, встроенные возможности awk обычно достаточно.

, В частности, GNU awk (gawk) - который является значением по умолчанию в текущих версиях Ubuntu - имеет regex соответствие возможностям, примерно эквивалентным синтаксису Расширенного регулярного выражения (ERE) POSIX, так, чтобы можно было обычно избегать использования grep. Например, учитывая

$ cat myscript.awk 
$5 ~ /[a-zA-Z]/ {print "Line " FNR ": alpha"}

и

$ cat file.txt
A B C D E F G H
1 2 3 4 5 6 7 8
a b c d e f g h

затем

$ awk -f myscript.awk file.txt
Line 1: alpha
Line 3: alpha
4
ответ дан 23 October 2019 в 05:42

Другие вопросы по тегам:

Похожие вопросы: