Saya memiliki masalah scripting shell di mana saya diberi direktori yang penuh dengan file input (setiap file yang mengandung banyak baris input), dan saya perlu memprosesnya secara individual, mengarahkan setiap output mereka ke file yang unik (alias, file_1.input perlu untuk ditangkap dalam file_1.output, dan sebagainya).
Pra-paralel , saya hanya akan mengulangi setiap file dalam direktori dan melakukan perintah saya, sambil melakukan semacam timer / teknik penghitungan untuk tidak membanjiri prosesor (dengan asumsi bahwa setiap proses memiliki runtime konstan). Namun, saya tahu itu tidak akan selalu menjadi masalah, jadi menggunakan solusi "paralel" sepertinya merupakan cara terbaik untuk mendapatkan skrip shell multi-threading tanpa menulis kode khusus.
Sementara saya telah memikirkan beberapa cara untuk menyiapkan paralel untuk memproses masing-masing file ini (dan memungkinkan saya untuk mengelola inti saya secara efisien), mereka semua tampak berantakan. Saya memiliki apa yang saya pikir adalah kasus penggunaan yang cukup mudah, jadi akan lebih memilih untuk menjaganya sebersih mungkin (dan tidak ada dalam contoh paralel yang tampaknya melompat keluar sebagai masalah saya.
Bantuan apa pun akan dihargai!
contoh direktori input:
> ls -l input_files/
total 13355
location1.txt
location2.txt
location3.txt
location4.txt
location5.txt
Naskah:
> cat proces_script.sh
#!/bin/sh
customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile]
Pembaruan : Setelah membaca jawaban Ole di bawah ini, saya dapat mengumpulkan potongan-potongan yang hilang untuk implementasi paralel saya sendiri. Meskipun jawabannya bagus, berikut adalah penelitian tambahan dan catatan yang saya ambil:
Alih-alih menjalankan proses penuh saya, saya pikir mulai dengan bukti perintah konsep untuk membuktikan solusinya di lingkungan saya. Lihat dua implementasi saya yang berbeda (dan catatan):
find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out
Penggunaan menemukan (bukan ls, yang dapat menyebabkan masalah) untuk menemukan semua file yang berlaku dalam direktori file input saya, dan kemudian mengalihkan kontennya ke direktori dan file terpisah. Masalah saya di atas adalah membaca dan mengarahkan ulang (skrip yang sebenarnya sederhana), jadi mengganti skrip dengan kucing adalah bukti konsep yang bagus.
parallel cat '>' /home/me/output_files/{.}.out ::: /home/me/input_files/*
Solusi kedua ini menggunakan paradigma input variabel paralel untuk membaca file dalam, namun untuk pemula, ini jauh lebih membingungkan. Bagi saya, menggunakan find a dan pipa memenuhi kebutuhan saya dengan baik.