मुझे एक शेल स्क्रिप्टिंग समस्या है, जहां मुझे इनपुट फ़ाइलों से भरी निर्देशिका दी गई है (प्रत्येक फ़ाइल जिसमें कई इनपुट लाइनें हैं), और मुझे उन्हें व्यक्तिगत रूप से संसाधित करने की आवश्यकता है, उनके प्रत्येक आउटपुट को एक अद्वितीय फ़ाइल (उर्फ, file_1.input) की आवश्यकता है file_1.output में कैप्चर किया जाना है, और इसी तरह)।
पूर्व-समानांतर , मैं बस निर्देशिका में प्रत्येक फ़ाइल पर पुनरावृति करूंगा और प्रोसेसर को अभिभूत नहीं करने के लिए टाइमर / गिनती तकनीक के कुछ प्रकार करते हुए अपनी कमांड का प्रदर्शन करता हूं (यह मानते हुए कि प्रत्येक प्रक्रिया में एक निरंतर रनटाइम था)। हालाँकि, मुझे पता है कि हमेशा ऐसा नहीं होगा, इसलिए समाधान की तरह "समानांतर" का उपयोग करना कस्टम कोड लिखने के बिना शेल स्क्रिप्ट मल्टी-थ्रेडिंग प्राप्त करने का सबसे अच्छा तरीका है।
जबकि मैंने इनमें से प्रत्येक फ़ाइल को संसाधित करने के लिए समानांतर रूप से कोड़ा मारने के बारे में सोचा है (और मुझे अपने कोर को कुशलतापूर्वक प्रबंधित करने की अनुमति देता है), वे सभी हैकिंग लगते हैं। मुझे लगता है कि मुझे लगता है कि यह एक बहुत ही आसान उपयोग मामला है, इसलिए इसे जितना संभव हो उतना साफ रखना पसंद करेंगे (और समानांतर उदाहरणों में कुछ भी मेरी समस्या के रूप में बाहर नहीं लगता है।
किसी भी सहायता की सराहना की जाएगी!
इनपुट निर्देशिका उदाहरण:
> ls -l input_files/
total 13355
location1.txt
location2.txt
location3.txt
location4.txt
location5.txt
स्क्रिप्ट:
> cat proces_script.sh
#!/bin/sh
customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile]
अद्यतन : ओले के जवाब को नीचे पढ़ने के बाद, मैं अपने स्वयं के समानांतर कार्यान्वयन के लिए लापता टुकड़ों को एक साथ रखने में सक्षम था। हालांकि उनका जवाब बहुत अच्छा है, यहाँ मेरे अतिरिक्त शोध और नोट्स हैं जिन्हें मैंने लिया:
अपनी पूरी प्रक्रिया को चलाने के बजाय, मैंने अपने वातावरण में उनके समाधान को साबित करने के लिए कॉन्सेप्ट कमांड के प्रमाण के साथ शुरुआत की। मेरे दो अलग कार्यान्वयन (और नोट) देखें:
find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out
मेरे इनपुट फ़ाइलों निर्देशिका के भीतर सभी लागू फ़ाइलों को खोजने के लिए फ़ाइंड (नहीं एलएस, जो मुद्दों का कारण बन सकता है) का उपयोग करता है, और फिर उनकी सामग्री को एक अलग निर्देशिका और फ़ाइल पर पुनर्निर्देशित करता है। ऊपर से मेरा मुद्दा रीडिंग और रीडायरेक्टिंग था (वास्तविक स्क्रिप्ट सरल थी), इसलिए बिल्ली के साथ स्क्रिप्ट को बदलना अवधारणा का एक अच्छा प्रमाण था।
parallel cat '>' /home/me/output_files/{.}.out ::: /home/me/input_files/*
यह दूसरा समाधान समानांतर फ़ाइलों के समानांतर प्रतिमान का उपयोग करता है, जिसमें फ़ाइलों को पढ़ने के लिए, हालांकि एक नौसिखिया के लिए, यह बहुत अधिक भ्रमित था। मेरे लिए, फाइंड ए और पाइप का उपयोग करके मेरी जरूरतों को पूरा किया गया।