Вызов инструмента awk напрямую по имени

Я написал awk-файл и сделал его исполняемым, но не хочу вызывать свой awk-файл следующим образом.

awk -f tool.awk FILE

Я просто хочу назвать это, используя

tool FILE

Я сделал tool.awk исполняемый файл и включил

#! /bin/awk -f

Затем следует ссылка с именем tool на tool.awk.

Я мог бы тогда вызвать tool FILE

Полагаю, я также могу вызвать tool FILE в сценарии bash. Верно?

Я предлагаю использовать function или alias. Смотрите help function или help alias.

Cyrus 20.02.2023 21:12

Функция bash или псевдоним инструмента awk без использования ссылок?

Goncho 20.02.2023 22:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не делай этого. Создайте сценарий оболочки с именем tool и вызовите из него awk:

#!/usr/bin/env bash

awk 'script' "${@:--}"

Если вы хотите вызвать awk из функции bash с именем foo:

#!/usr/bin/env bash

foo() {
    awk 'script' "${@:--}"
}

foo "${@:--}"

Суффиксы файлов не имеют смысла в UNIX, но если вы создаете команду, которая заканчивается любым суффиксом, например. tool.awk то это именно то, что вам нужно ввести, чтобы вызвать его (но не делайте этого, так как команды UNIX не должны иметь суффиксов).

Могу ли я вместо этого выполнить функцию bash?

Goncho 20.02.2023 23:04

Могу ли я вместо этого выполнить функцию bash? Как бы это выглядело?

Goncho 20.02.2023 23:20

Я добавил код, чтобы показать, как вызывать awk из функции.

Ed Morton 20.02.2023 23:30

По какой причине вы нанимаете "${@:--}"? Нужен ли скрипту awk #!/bin/awk -f?

Goncho 20.02.2023 23:39
"${@:--}" — это конструкция оболочки, которая означает use any arguments passed in or stdin otherwise, поэтому скрипт или функция могут работать с файлом или вводом, поступающим из канала.
Ed Morton 20.02.2023 23:54
#!/bin/awk -f неприменим, потому что опять же не стоит вызывать awk с шебангом, см. stackoverflow.com/a/61002754/1745001. Вызывайте сценарии оболочки с помощью шебанга, который идентифицирует оболочку, и просто вызывайте awk напрямую из сценария оболочки, как показано в моем ответе, чтобы избежать ненужных осложнений.
Ed Morton 20.02.2023 23:57

Тогда попробуйте awk -f ${awkpath}/firefly.awk "${@:--}" . Удачи.

shellter 21.02.2023 00:53

@EdMorton, очень хороший код, ура, сэр.

RavinderSingh13 21.02.2023 05:14

Что именно означает the ability to separate arguments passed to your shell script into values for the shell to process. У меня есть функция, которую я могу вызвать. Можно ли без ограничений вызывать его с аргументами, относящимися к awk-файлу?

Goncho 21.02.2023 09:43

Ответ, на который я ссылался в моем комментарии, объясняет проблему, но если у вас есть какие-либо вопросы по этому ответу, оставьте их под этим ответом, а не копируйте часть содержания этого ответа в комментарий здесь, а затем спрашивайте об этом.

Ed Morton 21.02.2023 11:19

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