2011-06-06 11 views
30

GNU parallel का उपयोग करना: http://www.gnu.org/software/parallel/विभाजन जीएनयू साथ कमांड लाइन आर्ग समानांतर

मैं एक प्रोग्राम है जो दो तर्क है, उदा लेता है

$ ./prog file1 file2 
$ ./prog file2 file3 
... 
$ ./prog file23456 file23457 

मैं एक स्क्रिप्ट है कि फ़ाइल नाम जोड़े उत्पन्न करता है का उपयोग कर रहा है, तथापि यह एक समस्या बन गया है क्योंकि स्क्रिप्ट का परिणाम एक एकल स्ट्रिंग है - नहीं एक जोड़ी। जैसे:

$ generate_file_pairs | parallel ./prog ? 
    # where ? is text under consideration, like "file1 file2" 

आसान काम के आसपास मैन्युअल में आर्ग विभाजित करने के लिए है:

$ ./prog "file1 file2" 

GNU parallel अगर वहाँ विभाजक के आसपास तेज पाठ के लिए एक है चाल ऊपर अपनी आस्तीन के एक धसान, मुझे आश्चर्य है कि करने के लिए लगता है प्रोग, लेकिन मैं जानना चाहता हूं कि GNU parallel में यह संभव है या नहीं।

उत्तर

54

आप शायद --colsep लिए देख रहे हैं यह वही आप के लिए देख रहे हैं।

generate_file_pairs | parallel --colsep ' ' ./prog {1} {2} 

man parallel और पढ़ें। और परिचय वीडियो देखने के लिए यदि आप पहले से ही ऐसा नहीं किया है http://www.youtube.com/watch?v=OpaiGYxkSuQ

+0

यह बिल्कुल है, धन्यवाद! – drhodes

+0

जैसा कि मैंने प्रारंभिक प्रश्न पढ़ा है, ऐसा लगता है कि "gener_file_pairs" उद्धरण चिह्नों के साथ आउटपुट होगा। '--colsep' उद्धरण चिह्नों को सही नहीं करेगा, सही? उद्धरण चिह्नों को पाठ के चारों ओर मानते हुए, क्या समानांतर के साथ उन्हें ट्रिम करने का कोई तरीका है? उदाहरण के लिए, निम्नलिखित काम नहीं करता है: 'echo' "file1 file2" '| समांतर --colsep ''/prog {1} {2} ' –

+0

संस्करण 20140722 से: echo' file1 file2 '' | समानांतर --colsep 'echo' {= 1 s/^ "// =} - {= 2 s /" $ // =} ' –

1

आप समानांतर के -n विकल्प की तलाश में हैं। GNU Parallel Doc से

./generate_file_pairs | parallel -n 2 ./prog {} 

अंश:

-n max-args 
    Use at most max-args arguments per command line. Fewer than max-args 
    arguments will be used if the size (see the -s option) is exceeded, 
    unless the -x option is given, in which case GNU parallel will exit. 
+0

ठीक है, लेकिन यह अभी भी -n विकल्प है। मैं तदनुसार संपादित करूंगा। – ssapkota

+0

यह विभाजन नहीं करेगा। उदा .: 'वहाँ हाय echo समानांतर-एन 2 गूंज {2} x {1} '=> x हाय वहाँ (इस मामले में कोई {2} नहीं है।) --colsep का उपयोग करना: 'echo hi वहाँ | समानांतर -n 2 --colsep 'echo {2} x {1} '==> वहाँ x hi –

0

समानांतर मैनुअल में यह कहा जाता है:

कोई आदेश दिया जाता है, तो इनपुट की लाइन निष्पादित किया जाता है ... जीएनयू समानांतर अक्सर कर सकते हैं xargs या बिल्ली के लिए एक विकल्प के रूप में इस्तेमाल किया जा सकता है दे घुमा के। इस के उत्पादन को समझने के लिए

generate command | parallel 

प्रयास करें:

तो की एक कोशिश ले

for i in {1..5};do echo "echo $i";done | parallel