Я написал awk-файл и сделал его исполняемым, но не хочу вызывать свой awk-файл следующим образом.
awk -f tool.awk FILE
Я просто хочу назвать это, используя
tool FILE
Я сделал tool.awk исполняемый файл и включил
#! /bin/awk -f
Затем следует ссылка с именем tool на tool.awk.
Я мог бы тогда вызвать tool FILE
Полагаю, я также могу вызвать tool FILE в сценарии bash. Верно?
Функция bash или псевдоним инструмента awk без использования ссылок?
Не делай этого. Создайте сценарий оболочки с именем tool и вызовите из него awk:
#!/usr/bin/env bash
awk 'script' "${@:--}"
Если вы хотите вызвать awk из функции bash с именем foo:
#!/usr/bin/env bash
foo() {
awk 'script' "${@:--}"
}
foo "${@:--}"
Суффиксы файлов не имеют смысла в UNIX, но если вы создаете команду, которая заканчивается любым суффиксом, например. tool.awk то это именно то, что вам нужно ввести, чтобы вызвать его (но не делайте этого, так как команды UNIX не должны иметь суффиксов).
Могу ли я вместо этого выполнить функцию bash?
Могу ли я вместо этого выполнить функцию bash? Как бы это выглядело?
Я добавил код, чтобы показать, как вызывать awk из функции.
По какой причине вы нанимаете "${@:--}"? Нужен ли скрипту awk #!/bin/awk -f?
"${@:--}"
— это конструкция оболочки, которая означает use any arguments passed in or stdin otherwise
, поэтому скрипт или функция могут работать с файлом или вводом, поступающим из канала.
#!/bin/awk -f
неприменим, потому что опять же не стоит вызывать awk с шебангом, см. stackoverflow.com/a/61002754/1745001. Вызывайте сценарии оболочки с помощью шебанга, который идентифицирует оболочку, и просто вызывайте awk напрямую из сценария оболочки, как показано в моем ответе, чтобы избежать ненужных осложнений.
Тогда попробуйте awk -f ${awkpath}/firefly.awk "${@:--}" . Удачи.
@EdMorton, очень хороший код, ура, сэр.
Что именно означает the ability to separate arguments passed to your shell script into values for the shell to process. У меня есть функция, которую я могу вызвать. Можно ли без ограничений вызывать его с аргументами, относящимися к awk-файлу?
Ответ, на который я ссылался в моем комментарии, объясняет проблему, но если у вас есть какие-либо вопросы по этому ответу, оставьте их под этим ответом, а не копируйте часть содержания этого ответа в комментарий здесь, а затем спрашивайте об этом.
Я предлагаю использовать function или alias. Смотрите help function или help alias.