Tôi gặp vấn đề về kịch bản shell khi tôi được cung cấp một thư mục chứa đầy các tệp đầu vào (mỗi tệp chứa nhiều dòng đầu vào) và tôi cần xử lý chúng riêng lẻ, chuyển hướng từng đầu ra của chúng sang một tệp duy nhất (còn gọi là file_1.input được ghi lại trong tệp_1.output, v.v.).
Song song , tôi sẽ chỉ lặp lại từng tệp trong thư mục và thực hiện lệnh của mình, trong khi thực hiện một số loại kỹ thuật hẹn giờ / đếm để không áp đảo các bộ xử lý (giả sử rằng mỗi quy trình có thời gian chạy không đổi). Tuy nhiên, tôi biết rằng sẽ không phải luôn luôn như vậy, vì vậy sử dụng giải pháp "song song" có vẻ là cách tốt nhất để có được chuỗi đa luồng shell mà không cần viết mã tùy chỉnh.
Trong khi tôi đã nghĩ ra một số cách để xử lý song song để xử lý từng tệp này (và cho phép tôi quản lý các lõi của mình một cách hiệu quả), tất cả chúng đều có vẻ hack. Tôi có những gì tôi nghĩ là một trường hợp sử dụng khá dễ dàng, vì vậy tôi muốn giữ nó sạch nhất có thể (và không có gì trong các ví dụ song song dường như là vấn đề của tôi.
Bất kỳ trợ giúp sẽ được đánh giá cao!
ví dụ thư mục đầu vào:
> ls -l input_files/
total 13355
location1.txt
location2.txt
location3.txt
location4.txt
location5.txt
Kịch bản:
> cat proces_script.sh
#!/bin/sh
customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile]
Cập nhật : Sau khi đọc câu trả lời của Ole bên dưới, tôi đã có thể tập hợp các phần còn thiếu để thực hiện song song của riêng mình. Trong khi câu trả lời của anh ấy rất hay, đây là nghiên cứu bổ sung và ghi chú của tôi, tôi đã thực hiện:
Thay vì chạy toàn bộ quá trình của mình, tôi đã tìm cách bắt đầu với một bằng chứng về lệnh khái niệm để chứng minh giải pháp của anh ấy trong môi trường của tôi. Xem hai triển khai khác nhau của tôi (và ghi chú):
find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out
Sử dụng find (không phải ls, có thể gây ra sự cố) để tìm tất cả các tệp áp dụng trong thư mục tệp đầu vào của tôi, sau đó chuyển hướng nội dung của chúng sang một thư mục và tệp riêng biệt. Vấn đề của tôi từ phía trên là đọc và chuyển hướng (kịch bản thực tế rất đơn giản), vì vậy thay thế kịch bản bằng con mèo là một bằng chứng tốt về khái niệm.
parallel cat '>' /home/me/output_files/{.}.out ::: /home/me/input_files/*
Giải pháp thứ hai này sử dụng mô hình biến đầu vào song song để đọc các tệp trong, tuy nhiên đối với người mới, điều này khó hiểu hơn nhiều. Đối với tôi, sử dụng find a và pipe đáp ứng nhu cầu của tôi tốt.