У меня есть программа на C, которую я хочу вызвать, используя awk в сценариях оболочки. Как я могу сделать что-то подобное?
Вызов исполняемой программы с помощью awk
Ответ 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.