2012-08-27 17 views
5

मैं दो सीएसवी/पाठ फ़ाइलें है कि मैं शामिल होने के लिए करना चाहते हैं। दोनों में एक ही पहली पंक्ति होती है। मैं एक विलय फ़ाइल बनाने के लिए sed और cat का उपयोग करने का तरीका जानने का प्रयास कर रहा हूं, लेकिन पहली पंक्ति की केवल एक प्रति के साथ। और मेरे पास वाक्यविन्यास के साथ समय है। किसी भी मदद की सराहना की जाएगी :- डी! धन्यवाद, एंड्रयूFile1 + (File2 - पहली पंक्ति)> file3

उत्तर

4

यह फ़ाइलों फ़ाइल merged.txt में data1.txt और data2.txt गठबंधन, data2.txt से पहली पंक्ति लंघन होगा। अगर आप इसके साथ ठीक कर रहे हैं यह awk का उपयोग करता है:

(cat data1.txt; awk 'NR>1' data2.txt) > merged.txt 

awk merged.txt फाइल करने के लिए फ़ाइल data2.txt से लाइन नंबर> 1 के साथ सभी लाइनें जोड़ देता है।

NR निर्मित एक awk चर उस फ़ाइल संसाधित किया जा रहा की वर्तमान पंक्ति संख्या के लिए खड़ा है। यदि बूलियन अभिव्यक्ति NR > 1 सत्य है, तो रेखा रेखा को स्पष्ट रूप से प्रिंट करती है।

आप data1.txt बरकरार रखने के बारे में परवाह नहीं है, तो आप सिर्फ अपने 2 फ़ाइल (ऋण इसकी पहली पंक्ति) संलग्न कर सकते हैं और कम करने के लिए सिर्फ इस:

awk 'NR>1' data2.txt >> data1.txt 
+2

वैकल्पिक रूप से, आप उपयोग कर सकते हैं 'पूंछ -n + 2'' awk 'एन.आर.> 1'' के बजाय। –

+0

@ TannerL.Swett साफ .. मैं किसी भी तरह 'head' या' tail' का उपयोग कर के पहले सोच रहा था, लेकिन मैं कैसे 'awk' के साथ ऐसा करने पर कुछ था। और निश्चित रूप से अगर ओपी को 'data1.txt' रखने के बारे में परवाह नहीं है तो समाधान पहले कमांड को छोड़ सकता है और उस फ़ाइल में दूसरी फ़ाइल (पहली पंक्ति) को जोड़ सकता है। – Levon

4

awk साथ एक अन्य विकल्प:

awk 'NR==FNR || FNR>1' file1.txt file2.txt .. fileN.txt 

यह पहली फ़ाइल में सभी लाइनों, या पहली पंक्ति के बाद बाद में फाइलों में किसी भी लाइन प्रिंट करता है।

+0

अगर मैंने ऐसा किया तो क्या होगा: 'awk' एनआर == एफएनआर || एफएनआर> 1 '* .txt' –

+0

आप फाइल ग्लोबिंग द्वारा मेल खाने वाली फ़ाइलों के क्रम पर भरोसा करेंगे। यदि उनमें सभी समान पहली पंक्तियां हैं, तो यह सुरक्षित होना चाहिए। आप कोशिश क्यों नहीं करते और देखते हैं कि क्या होता है? – ghoti

1

एक पंक्ति '1 डी के साथ हल के लिए निम्न आदेश परिणाम संलग्न File1 को

sed '1 d' file2 >> file1 
+0

आप इस आदेश के साथ 'file1' और' file2' दोनों को संशोधित कर रहे हैं - यह ओपी के साथ ठीक हो सकता है या नहीं भी हो सकता है। दोनों विकल्पों को प्रदान करने के लिए बेहतर (दूसरा मूल फ़ाइलों में से कोई भी नहीं बदल रहा है)। – Levon

+0

@ लेविन: नहीं, आप यहां 'file2' को संशोधित नहीं कर रहे हैं। – tripleee

+0

@ ट्रिपली ने बस इसका परीक्षण किया, यह * हटा नहीं * है, बल्कि * पहली पंक्ति * प्रदर्शित नहीं करता है .. इसे मिला। शायद उत्तर में बेहतर वाक्यांश हो सकता है। – Levon

2

मैं कहना चाहता हूँ सबसे सरल उपाय है जाएगा करें 2

में पहली पंक्ति को हटाने के लिए इसका मतलब है:

(cat file1.txt ; tail -n +2 file2.txt) > file3.txt 

यह स्पष्ट रूप से आप सिर्फ क्या कर रहे हैं बताते हुए का लाभ दिया है: पूरे पहली फ़ाइल को मुद्रित, तो लेकिन se की पहली पंक्ति सभी प्रिंट फ़ाइल फ़ाइल, तीसरी फाइल को आउटपुट लिखना।

+0

वाह !!! सबको धन्यवाद!!!!!!! :-D –

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