Присвоение системного вывода команды к переменной

Я хочу работать system команда в awk сценарии и сохранила свой вывод в переменной. Я пытался сделать это, но вывод команды всегда переходит к оболочке, и я не могу получить его. Какие-либо идеи о том, как это может быть сделано?

Пример:

$ date | awk --field-separator=! {$1 = system("strip $1"); /*more processing*/}

Должен звонить strip системная команда и вместо того, чтобы отправить вывод в оболочку, должен присвоить вывод назад $1 для большего количества обработки. Rignt теперь, это отправляет вывод для окружения и присваивает retcode команды $1.

47
задан Benjamin W. 7 March 2016 в 05:02
поделиться

2 ответа

Понял.

Мы используем awk's двусторонний ввод/вывод

{
  "strip $1" |& getline $1
}

передает 1$ на полоску, а линия getline возвращает вывод с полосы обратно в 1$

.
28
ответ дан 26 November 2019 в 19:22
поделиться

Примечание: Копирование специфично для GNU awk. В любом случае, другой вариант - использование getline

cmd = "strip "$1
while ( ( cmd | getline result ) > 0 ) {
  print  result
} 
close(cmd)

Вызов close(cmd) позволит awk устранить эту ошибку после ряда вызовов :

fatal: cannot open pipe `...'' (Слишком много открытых файлов)

56
ответ дан 26 November 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: