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
बेहतर लचीलापन और नियंत्रण प्रदान करता है, खासकर मूल क्रम को संरक्षित करने या अधिक जटिल डुप्लीकेट हटाने की आवश्यकताओं को संभालने के लिए।