दो अलग-अलग फ़ाइलों से कॉलम जोड़ना


10

Awk का उपयोग करके दो अलग-अलग फ़ाइलों से एक नई फ़ाइल मर्जिंग सेलेक्टिव कॉलम कैसे बनाएं? बिना बीओटीएच फाइलों के तत्वों के आदेशों को गड़बड़ाने के।

छूट: फ़ाइल 3 में फ़ाइल 1 से कॉलम 1,2,3 और फ़ाइल 2 से कॉलम 4 हो सकता है।

File 1
A   23  8   T
A   63  9   9
B   45  3   J

File 2
A   0
A   6   
B   5

File 3
A   23  8   0
A   63  9   6
B   45  3   5

जवाबों:


4

इसे इस्तेमाल करे:

$ awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1
A 23 8 0
A 63 9 6
B 45 3 5

धन्यवाद! मैं भी सफलतापूर्वक इस तरह की कोशिश की gawk का उपयोग कर:pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
dovah

2
@ डोवा: आप चुन सकते हैं paste file1 file2और फिर चयनित क्षेत्रों को प्रिंट कर सकते हैं awk
congonglm

यह file2मेमोरी में स्टोर होता है, जो फ़ाइलों के बड़े होने पर निषेधात्मक हो सकता है। मेमोरी ओवरहेड के बिना ऐसा करने का एक सरल तरीका है (मेरा उत्तर देखें)।
गिल्स एसओ- बुराई को रोकें '

17

इसके लिए एक समर्पित उपकरण है paste:। यह पहली फ़ाइल से प्रत्येक पूर्ण लाइन को दूसरी फ़ाइल से संबंधित लाइन के साथ मिलाता है; आप पहले या बाद में अवांछित कॉलम निकाल सकते हैं। उदाहरण के लिए, यह मानते हुए कि आपके कॉलम टैब-सीमांकित हैं:

paste file1.txt file2.txt | cut -f 1,2,3,6

यहां उन दोनों फाइलों को प्री-फिल्टर करने का एक तरीका है जो ksh / bash / zsh प्रोसेस प्रतिस्थापन पर निर्भर करती हैं।

paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
      <(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')

Awk को मुख्य रूप से एक समय में एक फ़ाइल संसाधित करने के लिए तैयार किया जाता है, लेकिन आप getlineसमानांतर में किसी अन्य फ़ाइल से पढ़ने के लिए कॉल कर सकते हैं।

awk '
  BEGIN {file2=ARGV[2]; ARGV[2]="";}
  {$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt

अब तक मैंने मान लिया है कि आप फ़ाइल 1 की पंक्ति 1 के साथ फ़ाइल 2 की पंक्ति 1, फ़ाइल 2 की पंक्ति 2 के साथ फ़ाइल 1 की पंक्ति 2 आदि से मेल खाना चाहते हैं। यदि आप किसी स्तंभ की सामग्री से मेल खाना चाहते हैं, तो यह एक है पूरी तरह से अलग मामला है। joinवह कार्य करेगा, बशर्ते कि आप जिस कॉलम से मिलान करना चाहते हैं, वह क्रमबद्ध हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.