2010-09-27 15 views
114

मैं दो पाठ फ़ाइलों है, उनमें से प्रत्येक किबैश में लाइन द्वारा दो फ़ाइलों लाइन मर्ज करने के लिए कैसे

file1.txt   file2.txt 
----------   --------- 
linef11    linef21 
linef12    linef22 
linef13    linef23 
.     . 
.     . 
.     . 

की तरह लाइन में इस तरह से एक जानकारी मैं एक पार्टी का उपयोग कर लाइनों से शोध करे विलय करने के लिए फ़ाइलों लाइनों करवाना चाहते हैं प्राप्त करने के लिए स्क्रिप्ट:

fileresult.txt 
-------------- 
linef11  linef21 
linef12  linef22 
linef13  linef23 
.   . 
.   . 
.   . 

यह बैश में कैसे किया जा सकता है?

उत्तर

177

आप paste उपयोग कर सकते हैं:

paste file1.txt file2.txt > fileresults.txt 
+0

यदि मैं एक डेलीमीटर का उपयोग करना चाहता हूं तो यह कैसे काम करता है? – Teja

+3

@SOaddict '' paste -d "\ n" *> results.txt''' –

+0

'पेस्ट' प्रत्येक कॉलम को टैब के साथ अलग करेगा जबतक कि आप' -d' विकल्प से ओवरराइड न करें, ताकि आप ' awk', 'sed', आदि ... प्रत्येक पंक्ति को प्रारूपित करने के लिए। उदाहरण: 'file1.txt file2.txt पेस्ट करें awk '{printf "% -61s |% s \ n", $ 1, $ 2}' '... यह 'diff -side-by-side' आउटपुट की नकल करता है) –

8

चेक

man paste 

संभव untabify या tabs2spaces

+0

एमएक्स में एम-एक्स प्रतिस्थापन-स्ट्रिंग टैब ले जाएगा, संभवतः विम और शायद कुछ अन्य टेक्स्ट एडिटर भी ऐसा कर सकते हैं। – Ben

+6

टैब – Pedru

18

यहाँ है गैर पेस्ट तरीकों जैसे कुछ आदेश के बाद

awk

awk 'BEGIN {OFS=" "}{ 
    getline line < "file2" 
    print $0,line 
} ' file1 

बैश

exec 6<"file2" 
while read -r line 
do 
    read -r f2line <&6 
    echo "${line}${f2line}" 
done <"file1" 
exec 6<&- 
8

का अनुसरण करें।

pr -tmJ a.txt b.txt > c.txt 
+0

के अलावा एक विभाजक निर्दिष्ट करने के लिए -d विकल्प का उपयोग करें, इसके अलावा, अगर आप विभाजक को बदलना चाहते हैं तो -s विकल्प का उपयोग करें। (+1) –

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