Я хочу работать system
команда в awk сценарии и сохранила свой вывод в переменной. Я пытался сделать это, но вывод команды всегда переходит к оболочке, и я не могу получить его. Какие-либо идеи о том, как это может быть сделано?
Пример:
$ date | awk --field-separator=! {$1 = system("strip $1"); /*more processing*/}
Должен звонить strip
системная команда и вместо того, чтобы отправить вывод в оболочку, должен присвоить вывод назад $1
для большего количества обработки. Rignt теперь, это отправляет вывод для окружения и присваивает retcode команды $1
.
Понял.
Мы используем awk's двусторонний ввод/вывод
{
"strip $1" |& getline $1
}
передает 1$ на полоску, а линия getline возвращает вывод с полосы обратно в 1$
.Примечание: Копирование специфично для GNU awk. В любом случае, другой вариант - использование getline
cmd = "strip "$1
while ( ( cmd | getline result ) > 0 ) {
print result
}
close(cmd)
Вызов close(cmd)
позволит awk
устранить эту ошибку после ряда вызовов :
fatal: cannot open pipe `...'' (Слишком много открытых файлов)