Я использую 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.