Tôi đang sử dụng xargsvới tùy chọn --max-args=0(cách khác -P 0).
Tuy nhiên, đầu ra của các quy trình được hợp nhất vào stdoutluồng mà không liên quan đến việc tách dòng thích hợp. Vì vậy, tôi thường kết thúc với các dòng như:
<start-of-line-1><line-2><end-of-line-1>
Khi tôi đang sử dụng egrepvới ^mẫu của tôi trên toàn bộ xargsđầu ra, điều này làm rối tung kết quả của tôi.
Có cách nào để buộc xargsviết các đầu ra của quy trình theo thứ tự (bất kỳ thứ tự nào, miễn là đầu ra của một quy trình tiếp giáp nhau) không?
Hoặc một số giải pháp khác?
Chỉnh sửa: thêm chi tiết về trường hợp sử dụng:
Tôi muốn tải xuống và phân tích các trang web từ các máy chủ khác nhau. Vì mỗi trang mất khoảng một giây để tải và có vài chục trang tôi muốn song song hóa các yêu cầu.
Lệnh của tôi có dạng sau:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Tôi sử dụng bash chứ không phải cái gì đó giống như Perl vì IP máy chủ (biến $ IP) và một số dữ liệu khác đến từ tệp bash đi kèm.
xargsdường như không cung cấp một tính năng như vậy.
maketính năng công việc, tôi nghĩ rằng makehợp nhất các dòng đầu ra đúng cách.
--line-bufferedcờ để egreptrợ giúp
xargs.