Я використовую 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.