Tôi đang sử dụng xargs
vớ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 stdout
luồ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 egrep
vớ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 xargs
viế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.
xargs
dường như không cung cấp một tính năng như vậy.
make
tính năng công việc, tôi nghĩ rằng make
hợp nhất các dòng đầu ra đúng cách.
--line-buffered
cờ để egrep
trợ giúp
xargs
.