दो फ़ाइलों को मर्ज करना, एक समय में एक कॉलम


12

मेरे पास निम्न प्रारूप की 2 बड़ी फाइलें (3000 कॉलम, 15000 पंक्तियाँ) हैं

फ़ाइल 1 (टैब से अलग):

1/0 0/0 0/0
0/0 1/1 0/0
1/1 0/1 0/0

फ़ाइल 2 (टैब-अलग)

3 5 2
1 7 10
3 4 3

मैं प्रत्येक फ़ाइल के पहले कॉलम के मानों को ":" विभाजक के साथ जोड़ना चाहता हूं, फिर दूसरे, तीसरे, आदि कॉलमों पर आगे बढ़ें। वांछित उत्पादन (टैब-अलग):

1/0:3 0/0:5 0/0:2
0/0:1 1/1:7 0/0:10
1/1:3 0/1:4 0/0:3

दक्षता महत्वपूर्ण नहीं है, इसलिए कोई भी भाषा ठीक है। अगर यह पहले पूछा गया है तो मैं माफी मांगता हूं।

जवाबों:


14

कुछ इस तरह? अपने नमूना डेटा के साथ काम किया:

paste  file{1,2} | awk '{for (i=1;i<=NF/2; i++){printf "%s:%s\t",$i,$(NF/2+i)};printf "\n"}'
1/0:3   0/0:5   0/0:2
0/0:1   1/1:7   0/0:10
1/1:3   0/1:4   0/0:3

2
मुझे पेस्ट पसंद है। +1
ग्लेन जैकमैन

काफी हद तक @glennjackman; मैं अपनी प्रतिक्रिया में संशोधन करूंगा।
tink

हाँ! पूरी तरह से काम किया! शीघ्र जवाब देने के लिए ध्न्यवाद।
जॉन डिग्नर

9
awk '{
    getline f2 < "file2"
    split(f2, a)
    for (i=1; i<=NF; i++) 
        printf "%s:%s\t", $i, a[i]
    print ""
}' file1

पूरी तरह से काम किया, हालांकि मैं टिंक की प्रतिक्रिया की सादगी पसंद करता हूं।
जॉन डिग्नर

1
@JonDegner तब यदि उस उत्तर (या इस एक) ने आपकी समस्या को हल कर दिया है, तो कृपया एक क्षण लें और बाईं ओर चेक मार्क पर क्लिक करके इसे स्वीकार करें। यह प्रश्न के उत्तर के रूप में चिह्नित करेगा और स्टैक एक्सचेंज साइटों पर धन्यवाद व्यक्त करने का तरीका है।
terdon

6

थोड़ा अलग दृष्टिकोण:

paste -d: <(xargs -n1 <file1) <(xargs -n1 <file2) | xargs -n 3

मैंने इसे उकेरा, लेकिन सिर्फ महसूस किया कि एन-3 भाग केवल प्रदान किए गए नमूने पर काम करता है। वास्तविक डेटा को समायोजित करने के लिए स्तंभ गणना को संशोधित करने की आवश्यकता है।
tink

@tink जाहिर है, हाँ। head -n1 | wc -wहालाँकि, आप कुछ के साथ कॉलम की गणना कर सकते हैं ।
माइकल व्हील्स

हे। इसका मतलब यह नहीं था कि आप जवाब देना चाहते हैं, मैं अच्छी तरह से जानता हूँ कि इसके आस-पास कैसे काम करना है ... बस एक स्पष्टीकरण कि आपके उत्तर में एक कम होना चाहिए:}
tink
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.