Bash Scripting

Bash में डुप्लीकेट लाइन्स को आसानी से हटाएँ

Spread the love

Bash स्क्रिप्टिंग में किसी टेक्स्ट फ़ाइल से डुप्लीकेट लाइन्स को हटाना एक सामान्य कार्य है। यह लेख दो कुशल तरीकों का पता लगाता है: sort और uniq का उपयोग करना, और awk की शक्ति का लाभ उठाना।

विषयसूची

sort और uniq का उपयोग करना

यह दृष्टिकोण एक सरल समाधान के लिए दो मौलिक यूनिक्स उपयोगिताओं को जोड़ता है। sort लाइनों को वर्णानुक्रम में व्यवस्थित करता है, जो uniq के लिए एक पूर्वापेक्षा है, जो तब क्रमागत डुप्लीकेट को हटा देता है। प्रत्येक लाइन के *पहले* प्रकटन का क्रम संरक्षित रहता है।

यहाँ कमांड है:


sort file.txt | uniq > file_unique.txt

यह file.txt के क्रमबद्ध आउटपुट को uniq में पाइप करता है, file_unique.txt में अद्वितीय लाइनों को सहेजता है। मूल फ़ाइल अछूती रहती है।

उदाहरण:

यदि file.txt में है:


apple
banana
apple
orange
banana
grape

file_unique.txt में होगा:


apple
banana
grape
orange

awk कमांड का उपयोग करना

awk एक अधिक लचीला और शक्तिशाली समाधान प्रदान करता है, खासकर जब लाइनों के मूल क्रम को संरक्षित करना महत्वपूर्ण हो। यह मिले हुए लाइनों को ट्रैक करने के लिए एक एसोसिएटिव एरे का उपयोग करता है।

कमांड उल्लेखनीय रूप से संक्षिप्त है:


awk '!seen[$0]++' file.txt > file_unique.txt

आइए इसे तोड़ते हैं:

  • $0 वर्तमान पूरी लाइन को दर्शाता है।
  • seen[$0] लाइन को कुंजी के रूप में उपयोग करके, seen एरे में एक तत्व तक पहुँचता है।
  • ++ मान (प्रारंभ में 0) को पोस्ट-इंक्रीमेंट करता है।
  • ! परिणाम को नकारता है; लाइन केवल तभी प्रिंट की जाती है जब यह पहली बार मिलती है (जब seen[$0] 0 होता है)।

यह विधि लाइनों के मूल क्रम को बनाए रखती है।

उदाहरण:

उसी file.txt का उपयोग करके, file_unique.txt में आउटपुट होगा:


apple
banana
orange
grape

निष्कर्ष:

दोनों विधियाँ प्रभावी रूप से डुप्लीकेट लाइनों को हटा देती हैं। बुनियादी परिदृश्यों के लिए sort | uniq सरल है, जबकि awk बेहतर लचीलापन और नियंत्रण प्रदान करता है, खासकर मूल क्रम को संरक्षित करने या अधिक जटिल डुप्लीकेट हटाने की आवश्यकताओं को संभालने के लिए।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *