Я использую xargs
с опцией --max-args=0
(альтернативно -P 0
).
Однако выходные данные процессов объединяются в stdout
поток без учета правильного разделения строк. Поэтому я часто получаю такие строки:
<start-of-line-1><line-2><end-of-line-1>
Как я использую egrep
с ^
в моем шаблоне на всей xargs
продукции этого Мессинг мой результат.
Есть ли какой-нибудь способ заставить xargs
записывать выходные данные процесса по порядку (в любом порядке, если выходные данные одного процесса непрерывны)?
Или какое-то другое решение?
Изменить: более подробную информацию о сценарии использования:
Я хочу загружать и анализировать веб-страницы с разных хостов. Поскольку загрузка каждой страницы занимает около секунды, а есть несколько десятков страниц, я хочу распараллелить запросы.
Моя команда имеет следующую форму:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Я использую bash, а не что-то вроде Perl, потому что IP-адреса хоста (переменная $ IPs) и некоторые другие данные поступают из включенного файла bash.
xargs
кажется, не предоставляет такую функцию.
make
функцию заданий, я думаю, что make
объединяет выходные строки правильно.
--line-buffered
флага, чтобы egrep
помочь
xargs
.