Ich benutze xargs
mit der Option --max-args=0
(alternativ -P 0
).
Die Ausgabe der Prozesse wird jedoch stdout
ohne Rücksicht auf eine ordnungsgemäße Leitungstrennung in den Strom eingebunden . So werde ich oft mit Zeilen enden wie:
<start-of-line-1><line-2><end-of-line-1>
Da ich egrep
mit ^
in meinem Muster auf der gesamten xargs
Ausgabe verwende, ist dies mein Ergebnis durcheinander.
Gibt es eine Möglichkeit, xargs
das Schreiben der Prozessausgaben in der angegebenen Reihenfolge zu erzwingen (eine beliebige Reihenfolge, solange die Ausgabe eines Prozesses zusammenhängend ist)?
Oder eine andere Lösung?
Bearbeiten: Weitere Details zum Anwendungsfall:
Ich möchte Webseiten von verschiedenen Hosts herunterladen und analysieren. Da das Laden jeder Seite etwa eine Sekunde dauert und es ein paar Dutzend Seiten gibt, möchte ich die Anforderungen parallelisieren.
Mein Befehl hat die folgende Form:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Ich benutze bash und nicht so etwas wie Perl, da die Host-IPs (die $ IPs-Variable) und einige andere Daten aus einer enthaltenen bash-Datei stammen.
xargs
scheint keine solche Funktion zu bieten.
make
Job-Funktion verwenden, ich denke, make
die Ausgabezeilen werden ordnungsgemäß zusammengeführt.
--line-buffered
Flagge hinzu, egrep
um zu helfen
xargs
.