अन्य फ़ाइल से फ़ाइल की प्रत्येक पंक्तियों में उपसर्ग जोड़ें


0

मेरे पास file1.txt और file2.txt नाम की दो फाइलें हैं, मैं file1.txt से file2.txt में उपसर्ग को इस तरह से जोड़ने की कोशिश कर रहा हूं ताकि मैं अपने द्वारा उपयोग की जा रही अगली उपयोगिता के परिणामों को पाइप कर सकूं ।

cat file1.txt

aa
bb
cc

cat file2.txt

site.com
site2.com
site3.com

अपेक्षित परिणाम जैसा दिखेगा:

aa.site.com
aa.site2.com
aa.site3.com
bb.site.com
bb.site2.com
bb.site3.com
cc.site.com
cc.site2.com
cc.site3.com

जवाबों:


1

बैश के साथ:

while IFS= read -r line1; do while IFS= read -r line2; do echo "$line1.$line2"; done <file2.txt; done <file1.txt

या

join -j 64 <(sort file1.txt) <(sort file2.txt) -o 1.1,2.1 | sed 's/ /./'

आउटपुट:

aa.site.com
aa.site2.com
aa.site3.com
bb.site.com
bb.site2.com
bb.site3.com
cc.site.com
cc.site2.com
cc.site3.com

आपके उत्तर के लिए धन्यवाद @ साइरस, यह अपेक्षा के अनुरूप काम करता है।
सैम

1

आसान हिस्सा यह है कि आप pasteअपनी फ़ाइलों की लाइनों को मर्ज करने के लिए उपयोग कर सकते हैं । इसका -dविकल्प आपको एक सीमांकक (यहां, ए .) चुनने देता है ।

यहां का कठिन हिस्सा कार्टेशियन उत्पाद है। एसओ के इस जवाब से दुखी होकर , हम इस तरह एक आदेश के साथ आ सकते हैं:

paste -d '.' \
  <(sed -n "$(yes 'p;' | head -n $(wc -l <file2.txt) )" file1.txt) \
  <(cat $(yes 'file2.txt' | head -n $(wc -l <file1.txt)))

हम कहाँ:

  • सम्मिलित करें yesऔर headएक sedस्क्रिप्ट बनाने के file1.txtलिए, जिसमें लाइनों की संख्या के बराबर संख्या के प्रत्येक पंक्ति को प्रिंट किया जाएगा file2.txt;
  • कम्बाइन yesऔर headबनाने के लिए catप्रिंट file2.txtमें लाइनों की संख्या के बराबर कई बार file1.txt;
  • pasteदो प्रक्रिया प्रतिस्थापन ( <(...)) द्वारा अलग की गई प्रत्येक जोड़ी की रेखाओं को मिलाने के लिए प्रयोग करें , a द्वारा अलग .

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

while ... do ... done <file | cat -

सुविधा के लिए, आप एक फ़ंक्शन को परिभाषित कर सकते हैं और इसे अपने पर्यावरण के लिए उपलब्ध कर सकते हैं (उदाहरण के लिए .bashrcयदि आप इसका उपयोग करते हैं तो इसे परिभाषित करना bash)।
एक उदाहरण, बाहरी उपकरणों की आवश्यकता को कम करने के लिए छोरों का उपयोग करके:

function cart_prod () {
  while IFS= read -r line1; do
    while IFS= read -r line2; do
      printf '%s.%s\n' "$line1" "$line2"
    done <"$2"
  done <"$1"
}

नमूना उपयोग:

$ cart_prod file1.txt file2.txt | sort -r
cc.site.com
cc.site3.com
cc.site2.com
bb.site.com
bb.site3.com
bb.site2.com
aa.site.com
aa.site3.com
aa.site2.com
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.