Подтвердить что ты не робот

Вызов исполняемой программы с помощью awk

У меня есть программа на C, которую я хочу вызвать, используя awk в сценариях оболочки. Как я могу сделать что-то подобное?

4b9b3361

Ответ 1

На странице руководства AWK:

system(cmd)
              executes cmd and returns its exit status

GNU AWK manual также имеет раздел, который частично описывает функцию system и предоставляет пример:

system("date | mail -s 'awk run done' root")

Ответ 2

Существует несколько способов.

  • awk имеет функцию system(), которая будет запускать команду оболочки:

    system("cmd")

  • Вы можете печатать на трубке:

    print "blah" | "cmd"

  • У вас могут быть команды awk construct и передать весь вывод в оболочку:

    awk 'some script' | sh

Ответ 3

Что-то простое, как это будет работать

awk 'BEGIN{system("echo hello")}'

и

awk 'BEGIN { system("date"); close("date")}'

Ответ 4

#!/usr/bin/awk -f

BEGIN {
    command = "ls -lh"

    command |getline
}

Запускает "ls -lh" в awk script

Ответ 5

На самом деле это зависит:) Из удобных linux core utils (info coreutils) есть xargs. Если вы используете awk, у вас, вероятно, есть более привлекательный случай использования - ваш вопрос не очень подробно.

echo "1 2\n3 4" | awk '{ print $2 } ' | xargs touch

Выполняет touch 2 4. Здесь touch может быть заменен вашей программой. Больше информации на info xargs и man xargs.

Ответ 6

Я использую силу awk для удаления некоторых из моих остановленных контейнеров докеров. Соблюдайте осторожность, как я строю строку cmd, прежде чем передать ее в system.

docker ps -a | awk '$3 ~ "/bin/clish" { cmd="docker rm "$1;system(cmd)}'

Здесь я использую третий столбец с шаблоном "/bin/clish", а затем я извлекаю идентификатор контейнера в первом столбце, чтобы построить строку cmd и передал это значение в system.

Ответ 7

Мне удалось сделать это с помощью метода ниже

cat ../logs/em2.log.1 |grep -i 192.168.21.15 |awk '{system(`date`); print $1}'

awk имеет функцию, называемую системой, которая позволяет вам выполнить любую команду linux bash в выходе awk.