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