Вам нужно указать аргумент для system
.
Вы можете сделать это в двойных кавычках:
awk 'NR>1 {system("python3 tst.py \"" $3 "\"")}'
Но двойные кавычки заставят $(echo something)
работать как в оболочке. Лучше цитировать его в одинарных кавычках. Поскольку вы не можете сделать '
внутри awk
скрипта, очень популярно использовать переменную, установленную в одинарную кавычку, или использовать \x27
это значение ascii внутри awk
скрипта:
awk -vq="'" 'NR>1 {system("python3 tst.py " q $3 q)}'
Это будет конечно, потерпит неудачу, если сам аргумент $3
содержит одинарные кавычки. Что вы можете сделать, это написать свою собственную функцию цитирования. Просто замените одиночные кавычки '
на последовательность '\''
и используйте одинарные кавычки, чтобы заключить ее в кавычки, например, abc'def
при вводе становится 'abc'\''def'
при передаче в оболочку:
awk -vq="'" 'NR>1 {gsub(q, q "\\" q q, $3); system("echo tst.py " q $3 q)}'
В awk все внутри "
принимается за строку. Так что awk 'NR>1 {system("python3 tst.py $3")}'
попытается запустить буквально python3 tst.py $3
. Когда $3
расширяется до 3-го аргумента в оболочке, он расширяется до нуля, и он просто запускает python3 tst.py
. Вы хотите объединить строку python3 tst.py
с результатом $3
в awk
, таким образом system("python3 tst.py " $3)
.