Для запуска системной команды в awk
вы можете использовать system()
или cmd | getline
.
Я предпочитаю cmd | getline
, потому что он позволяет вам перехватить значение в переменной:
$ awk 'BEGIN {"date" | getline mydate; close("date"); print "returns", mydate}'
returns Thu Jul 28 10:16:55 CEST 2016
В общем, вы можете установить команду в переменную:
awk 'BEGIN {
cmd = "date -j -f %s"
cmd | getline mydate
close(cmd)
}'
Обратите внимание, что важно использовать close()
, чтобы избежать получения ошибки "делает слишком много открытых файлов", если у вас есть несколько результатов (спасибо mateuscb за указание на это в комментариях).
Используя system()
, вывод команды печатается автоматически, а значение, которое вы можете поймать, это код возврата:
$ awk 'BEGIN {d=system("date"); print "returns", d}'
Thu Jul 28 10:16:12 CEST 2016
returns 0
$ awk 'BEGIN {d=system("ls -l asdfasdfasd"); print "returns", d}'
ls: cannot access asdfasdfasd: No such file or directory
returns 2