अजीब स्क्रिप्ट चलाने के बाद स्ट्रिंग्स का ट्रंकेशन

Nov 23 2020

मेरे पास यह कोड है

BEGIN { FS=OFS=";" }
{ key = $(NF-1) } NR == FNR { for (i=1; i<(NF-1); i++) { if ( !seen[key,$i]++ ) {
            map[key] = (key in map ? map[key] OFS : "") $i } } next } { print $0 map[key] }

मैं इस तरह से कोड का उपयोग करता हूं

awk -f tst.awk 2.txt 1.txt

मेरे पास दो टेक्स्ट फाइलें हैं

1 .txt

AA;BB;

.टैक्स

CC;DD;BB;AA;

मैं इस 3 .txt आउटपुट को जनरेट करने की कोशिश करता हूं

AA;BB;CC;DD;

लेकिन इस लिपि के साथ यह संभव नहीं है क्योंकि यह लिपि ही लौटती है AA;BB;

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

जवाब

1 RavinderSingh13 Nov 23 2020 at 08:33

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

paste -d';' 1.txt 2.txt | 
awk '
BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}'