दोनों पाठ फ़ाइलों में कई पंक्तियों के लिए awk स्क्रिप्ट का विस्तार करें और यदि दोनों फ़ाइलों का एक ही रिकॉर्ड नहीं है

Dec 01 2020

मैं यह 3 .txt आउटपुट जेनरेट कर सकता हूं

AA;BB;CC;DD;

2 पाठ फ़ाइलों से। दोनों फाइलों में केवल एक ही रिकॉर्ड है

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

मैं इस awk स्क्रिप्ट का उपयोग करता हूं।

BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}

मैं इस तरह से उपयोग करता हूं, मैं pasteदोनों फाइलों को संयोजित करने के लिए कमांड का उपयोग करता हूं और फिर awkकमांड द्वारा इसके आउटपुट को संसाधित करता हूं ।

paste 1st.txt 2nd.txt | awk -f tst.awk > "3.txt"

लेकिन मुझे क्या चाहिए?
मुझे एक एकल रिकॉर्ड पर अधिक विचार करने की आवश्यकता है। मैं इस स्थिति के लिए इस स्क्रिप्ट को अनुकूलित करने की कोशिश करता हूं। आप देख सकते हैं कि अब दोनों फाइलों में केवल एक ही रिकॉर्ड नहीं है।

1 .txt

UU;    
AA;BB;
ZZ;KK;

2 .txt

CC;DD;BB;AA;
LL;KK;
GH;ZZ;SS;

आउटपुट 3 .txt कि मैं उत्पन्न करने की कोशिश यह है

UU;
AA;BB;CC;DD;
ZZ;KK;LL;GH;SS;

प्रसंस्करण तर्क:

ऊपर कोड सिर्फ सरणी सूचकांकों के हैश लुकिंग में शाब्दिक तार का उपयोग करता है ताकि यह परवाह न करें कि आपके इनपुट में आपके पास कौन से वर्ण हैं।
हालाँकि, नमूना आउटपुट के बारे में: यदि 2 में। आम तौर पर 1 .txt.for उदाहरण में भी सामान्य फ़ील्ड हैं, BB;AA;तो आपको उन्हें एक ही पंक्ति में, यानी AA;BB;CC;DD; आदेश देने की आवश्यकता नहीं है, उदाहरण के लिए प्रासंगिक नहीं है यदि आउटपुट BB;AA;DD;CC;केवल शर्त है जो आवश्यक है उसी पंक्ति में फ़ील्ड डुप्लिकेट से बचें

जब मैं कहता हूं कि 'डुप्लिकेट से बचें' मेरा मतलब है कि इस आउटपुट से बचें

AA;BB;CC;DD;BB;AA;

क्योंकि आउटपुट होना चाहिए

AA;BB;CC;DD;

जवाब

4 User Dec 01 2020 at 15:23

शायद यही आप चाहते हैं:

BEGIN{FS=OFS=";"}
{sub(/;$/,"")} NR==FNR{ for (i=1;i<=NF;++i) for (j=1;j<=NF;++j) if (j!=i&&!b[$i,$j]++) a[$i,++c[$i]]=$j
    next
}
{
    delete b
    for (i=1;i<=NF;++i)
        ++b[$i] for (i=1;i<=NF;++i) for (j=1;j<=c[$i];++j)
            if (!b[a[$i,j]]++) $(NF+1)=a[$i,j]
    print
}

इसे इस तरह उपयोग करें:

awk -f script.awk 2.txt 1.txt

यहाँ कुछ पिछले प्रश्न दिए गए हैं (संभवतः आपका - आप उन्हें देखना चाहते हैं और इस पर काम कर सकते हैं कि आप अपने प्रश्न को ठीक से कैसे पूछें):

  • https://superuser.com/q/1600078
  • awk: डेटा उत्पन्न करते समय पंक्ति क्रम और डुप्लिकेट स्ट्रिंग्स (दर्पण) को हटा दें
  • https://superuser.com/q/1600557
  • https://superuser.com/q/1601402
  • https://superuser.com/q/1602713
  • https://stackoverflow.com/q/64929865
  • https://superuser.com/q/1604046
  • जाग में गतिशील नियमित अभिव्यक्ति
  • अजीब स्क्रिप्ट चलाने के बाद स्ट्रिंग्स का ट्रंकेशन