Ben giriş dosyaları (birçok giriş satırı içeren her dosya) dolu bir dizin verildi bir kabuk komut dosyası sorunum var ve ben her biri kendi çıktıları benzersiz bir dosya (aka, file_1.input ihtiyaçlarını yeniden yönlendirerek, ayrı ayrı işlemek gerekir file_1.output vb. içinde yakalanacaktır).
Önceden paralel olarak , işlemcileri boğmamak için bir çeşit zamanlayıcı / sayma tekniği yaparken (her işlemin sabit bir çalışma zamanı olduğunu varsayarak) dizindeki her dosya üzerinde tekrarlar ve komutumu gerçekleştiririm. Ancak, her zaman böyle olmayacağını biliyorum, bu yüzden "paralel" gibi bir çözüm kullanmak özel kod yazmadan kabuk komut dosyası çok iş parçacıklı almak için en iyi yol gibi görünüyor.
Bu dosyaların her birini işlemek için paralel kırbaçlamak için bazı yollar düşünürken (ve çekirdeklerimi verimli bir şekilde yönetmeme izin verirken), hepsi hacky görünüyor. Oldukça kolay bir kullanım durumu olduğunu düşündüğüm şey var, bu yüzden mümkün olduğunca temiz tutmayı tercih ederim (ve paralel örneklerde hiçbir şey benim sorunum olarak atlanmıyor gibi görünüyor.
Herhangi bir yardım mutluluk duyacağız!
giriş dizini örneği:
> ls -l input_files/
total 13355
location1.txt
location2.txt
location3.txt
location4.txt
location5.txt
Senaryo:
> cat proces_script.sh
#!/bin/sh
customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile]
Güncelleme : Ole'nin aşağıdaki cevabını okuduktan sonra, kendi paralel uygulamam için eksik parçaları bir araya getirebildim. Cevabı harika olsa da, ek araştırmalarım ve aldığım notlar:
Tüm sürecimi yürütmek yerine, çözümünü çevremde kanıtlamak için bir konsept emri belgesi ile başlamayı düşündüm. İki farklı uygulamama (ve notuma) bakın:
find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out
Giriş dosyaları dizinimdeki tüm geçerli dosyaları bulmak için find (ls değil, sorunlara neden olabilir) kullanır ve ardından içeriklerini ayrı bir dizine ve dosyaya yeniden yönlendirir. Yukarıdaki sorunum okuma ve yönlendirme (asıl komut dosyası basitti), bu yüzden komut dosyasını kedi ile değiştirmek kavramın güzel bir kanıtıydı.
parallel cat '>' /home/me/output_files/{.}.out ::: /home/me/input_files/*
Bu ikinci çözüm, dosyaları okumak için parallel'in giriş değişkeni paradigmasını kullanır, ancak bir acemi için bu çok daha kafa karıştırıcıydı. Benim için, bulmak bir ve boru kullanarak benim ihtiyaçlarını iyi karşıladı.