Расчет требований к ОЗУ / месту подкачки [ duplicate]

Если только один из входных файлов должен поступать от команды, достаточно простой трубы. Используйте - в качестве имени файла для обозначения стандартного ввода.

curl 'http://example.com?code=$1&fmt=csv' | join -1 1 -2 1 file1 -

Если оба файла должны быть получены из труб, то вам нужно что-то большее, чем базовые возможности оболочки. В Ksh, bash и zsh есть подстановка процесса, которая позволяет передавать вывод команды в любом месте, где программа ожидает имя файла.

curl 'http://example.com?code=$1&fmt=csv' | sort |
join -1 1 -2 1 <(sort file1) -

или эквивалентно для симметрии

join -1 1 -2 1 <(

Обычный sh не имеет подстановки процессов. Переносное решение, если вам нужно, чтобы команда получала входные данные из нескольких труб, - использовать именованные трубы.

tmp="$(mktemp -d)"
mkfifo "$tmp/p"
sort "$tmp/p" &
curl 'http://example.com?code=$1&fmt=csv' | sort | join -1 1 -2 1 "$tmp/p" -
rm "$tmp/p"
rmdir "$tmp"

0
27.02.2015, 15:03
0 ответов

Теги

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