2011-11-04 13 views
5

के साथ एक हेडेड सीएसवी फ़ाइल को संसाधित करना क्या यह संभव है कि यह प्रत्येक बच्चे की नौकरी के एसटीडीआईएन में मूल इनपुट की पहली पंक्ति दोहराएगा?gnu समानांतर

मेरे पास एक CSV फ़ाइल है जिसमें शीर्ष पर एक शीर्षलेख रेखा है। उदाहरण के लिए:

> csv_extract large.csv count 
123 
456 

मैं क्रमानुसार मानों का योग कर सकते हैं के रूप में:

> csv_extract large.csv count | awk '{ SUM += $1 } END { print SUM }' 
579 

वास्तविक फ़ाइल मैं

> cat large.csv 
id,count 
abc,123 
def,456 

मैं एक उपकरण है जो बल्कि स्थिति से नाम से कॉलम निकाल सकते हैं है बहुत बड़ा है, और ऑपरेशन संक्षेप में अधिक जटिल है, लेकिन वही सिद्धांत लागू होंगे। मैं फ़ाइल को संसाधित करने के लिए gnu समानांतर का उपयोग करना चाहता हूं, लेकिन मुझे नहीं पता कि प्रत्येक नौकरी के लिए सीएसवी हेडर दोहराने के लिए gnu समानांतर कहना संभव है या नहीं।

> cat large.csv | parallel --pipe --repeat-first-line "csv_extract /dev/stdin count | awk '{ SUM += $1 } END { print SUM }'" 
579 

मैं कार्यक्षमता मैं समझ नहीं प्रतिनिधित्व करने के लिए --repeat-पहली पंक्ति विकल्प बना दिया है इसके बाद के संस्करण:

आदर्श रूप में मैं की तरह कुछ के साथ आपरेशन चला सकते हैं। मैंने यूट्यूब वीडियो देखे हैं, और मैन पेज को पढ़ा है, लेकिन मैं यह देखने में सक्षम नहीं हूं कि यह कैसे संभव हो सकता है, यदि संभव हो तो।

धन्यवाद!

  • danboo
+0

आप जब प्रसंस्करण किया जाता है 'parallel' कि सिर्फ सभी फाइलों को हैडर कहते हैं की एक अलग रन बना सकता है? या वास्तव में 'लूप' के लिए, यदि आप नियंत्रित करते हैं कि आपकी 'समांतर' आउटपुट फ़ाइलों के लिए कहां और किस नाम का उपयोग किया जाता है। सौभाग्य! – shellter

उत्तर

5

आज आप --skip-first-line और हैडर echo का उपयोग कर जोड़ सकते हैं:

seq 10 | parallel --skip-first-line --pipe '(echo hea,der; cat) | my_prog' 

एक भविष्य संस्करण में आप का विकल्प होगा '--header' जो एक regexp हो जाएगा जो आपके शीर्षलेख के अंत से मेल खाता है (उदाहरण के लिए: 'लाइन' या '\ n। * \ n' के लिए दो पंक्तियों या '---' के लिए पहले और सहित --- ---

- संपादित करें -

जीएनयू समानांतर के नवीनतम संस्करण अब कर सकते हैं:

parallel --pipe --header : my_program 
+0

मैं '--header' विकल्प की प्रतीक्षा करता हूं। और 'echo' विचार के लिए धन्यवाद। हालांकि यह मेरे उपयोग के लिए सामान्य नहीं है, मैं कम से कम डिस्क फ़ाइलों के लिए कुछ समान उपयोग कर सकता हूं: 'cat big.csv | समांतर --स्किप-फर्स्ट-लाइन - पाइप '(हेड -1 big.csv; बिल्ली) | my_prog'' – danboo

संबंधित मुद्दे