Używam xargs
z opcją --max-args=0
(alternatywnie -P 0
).
Jednak wyniki procesów są scalane ze stdout
strumieniem bez uwzględnienia właściwego rozdzielenia linii. Więc często kończę liniami takimi jak:
<start-of-line-1><line-2><end-of-line-1>
Ponieważ używam egrep
z ^
moim wzorem na całej xargs
wyjście to jest brudząc się mój wynik.
Czy jest jakiś sposób na wymuszenie xargs
zapisu wyników procesu w dowolnej kolejności (w dowolnej kolejności, o ile wynik jednego procesu jest ciągły)?
Lub jakieś inne rozwiązanie?
Edycja: więcej szczegółów na temat przypadku użycia:
Chcę pobierać i analizować strony internetowe z różnych hostów. Ponieważ ładowanie każdej strony zajmuje około sekundy, a istnieje kilkadziesiąt stron, chcę zrównoważyć żądania.
Moje polecenie ma następującą postać:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Używam bash, a nie czegoś takiego jak Perl, ponieważ adresy IP hosta (zmienna $ IPs) i niektóre inne dane pochodzą z dołączonego pliku bash.
xargs
nie wydaje się zapewniać takiej funkcji.
make
z funkcji zadań, myślę, że odpowiednio make
łączy linie wyjściowe.
--line-buffered
flagę, aby egrep
pomóc
xargs
.