Можно ли передать скрипт в awk внутри переменной оболочки? - PullRequest
1 голос
/ 01 апреля 2019

Возможно ли хранить скрипт awk внутри переменной оболочки;например:

export script="'{printf(\$2); printf("\"\\n\"");}'"

echo $script
'{printf($2); printf("\n");}'

Сценарий работает правильно, когда я вызываю его напрямую следующим образом:

awk '{printf($2); printf("\n");}' testFile.txt
prints proper output

Когда я пытаюсь передать сценарий как переменную оболочки, я сталкиваюсь с проблемами.

awk $script testFile.txt
awk: syntax error at source line 1
 context is
     >>> ' <<< 
    missing }
awk: bailing out at source line 1

Я получаю немного другую ошибку, когда заключаю переменную в двойные кавычки

awk "$script" testFile.txt
awk: syntax error at source line 1
 context is
     >>> ' <<< 
awk: bailing out at source line 1

Я все еще изучаю, как именно работают расширения оболочки, я был бы признателен за любые предложения о том, чтоЯ скучаю здесь.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2019

Ошибка в вашем цитировании

export script='{printf($2); printf("\n");}'
awk "${script}" YourFile
0 голосов
/ 01 апреля 2019

При вводе

awk '{printf($2); printf("\n");}' testFile.txt

awk видит только {printf($2); printf("\n");} - оболочка удаляет кавычки (см. Удаление цитаты в руководстве по bash)

Внимание@ NeronLeVelu ответ.

0 голосов
/ 01 апреля 2019

Я не уверен в правильном ответе на этот вопрос, но очень уродливый (и, вероятно, нестабильный в зависимости от содержимого $script) обходной путь будет:

echo $script | awk '{print "awk "$0" testFile.txt"}' | bash

Это просто печать содержимого $script в операторе awk, который затем выполняется bash. Я не особо горжусь этим, но, может быть, это помогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...