सीधे कंटेंट पर जाएं

डुप्लिकेट लाइनें हटाएं

किसी सूची को साफ़ करें: दोहराव हटाएं, उसे ठीक से सॉर्ट करें, ख़ाली लाइनें हटाएं। यह बताता है कि कौन-सी लाइनें दोहराई गई थीं और कितनी बार, चुपचाप आपकी सूची छोटी नहीं करता।

  • कभी स्टोर नहीं होती
  • न कतार, न इंतज़ार
  • साइनअप नहीं, वॉटरमार्क नहीं
सॉर्ट करें
साफ़ करें
नतीजा

नतीजा यहां दिखेगा।

यह कैसे काम करता है

1

अपनी सूची पेस्ट करें

ईमेल, URL, प्रोडक्ट कोड, कुछ भी, हर लाइन में एक। या कोई टेक्स्ट फ़ाइल यहां छोड़ें।

2

चुनें कि “एक जैसा” का मतलब क्या है

आख़िरी स्पेस नज़रअंदाज़ करें, कैपिटल/स्मॉल अक्षर नज़रअंदाज़ करें, पहली या आख़िरी कॉपी रखें — या हर वह लाइन हटा दें जिसका कोई भी डुप्लिकेट था।

3

सॉर्ट करें और साफ़ करें

नैचुरल क्रम में सॉर्ट करें, उल्टा करें, शफ़ल करें, लाइनों पर नंबर लगाएं या ख़ाली लाइनें हटाएं — फिर नतीजा कॉपी करें।

जो लाइनें आप रखते हैं, उनका क्या होता है

इस पेज पर व्हाइटस्पेस संभालने के दो अलग-अलग तरीक़े हैं, और इन्हें आपस में न मिलाना ठीक है। तुलना के लिए ट्रिम करना सिर्फ़ की (key) बनाता है और आपकी लाइनें कभी एडिट नहीं करता — जो कॉपी बचती है, उसकी ओरिजिनल स्पेसिंग बिल्कुल वैसी ही रहती है। साफ़ करने वाले विकल्प इसका उल्टा करते हैं: इंडेंटेशन हटाना, लगातार आने वाले स्पेस और टैब को समेटना, और लाइनों के सिरे ट्रिम करना असली एडिट हैं, और ये डुप्लिकेट हटाने से पहले होते हैं, इसलिए इनमें से कोई चालू करने से चुपचाप यह भी बदल जाता है कि डुप्लिकेट किसे माना जाए, और यह भी कि लाइनें कैसी दिखती हैं।

ख़ाली लाइन की तुलना भी किसी दूसरी लाइन की तरह होती है, जिसका मतलब है कि पहली के बाद की हर ख़ाली लाइन बाक़ी डुप्लिकेट के साथ ग़ायब हो जाती है — पैराग्राफ़ के बीच जगह वाली सूची एक ही ख़ाली लाइन के साथ लौटती है, उसी जगह पर जहां पहली थी। और क्या दोहराया गया, इसकी रिपोर्ट आपकी लाइन नहीं, की दिखाती है: ट्रिम की हुई, और अगर आपने कैपिटल/स्मॉल अक्षरों को नज़रअंदाज़ करने को कहा था तो लोअरकेस में। इसलिए आपकी सूची में Smith और SMITH दोनों रूपों में आने वाली एंट्री एक बार, लोअरकेस में, दो की गिनती के साथ दिखती है। यह सूची सबसे ज़्यादा आने वाली पचास एंट्री तक सीमित है।

अंदर चाहे जो जाए, बाहर आने वाला नतीजा सिर्फ़ लाइन फ़ीड से जुड़ा होता है, इसलिए Windows फ़ाइल से पेस्ट की गई सूची रास्ते में अपने कैरिज रिटर्न खो देती है — आम तौर पर यही आप चाहते थे, पर अगर आप नतीजा किसी ऐसी चीज़ में वापस पेस्ट कर रहे हैं जिसे इससे फ़र्क़ पड़ता है, तो यह जानना ज़रूरी है। एक और असर: “कैपिटल/स्मॉल अक्षरों को नज़रअंदाज़ करें” चालू करने से तुलना के साथ सॉर्टिंग भी बदलती है, और तब सॉर्ट एक्सेंट वाले अक्षरों को सादे अक्षरों से अलग करना भी बंद कर देता है, इसलिए resume और résumé अलग-अलग नहीं, साथ-साथ आते हैं।

जब आपको कुछ और चाहिए

जब सूची असल में एक टेबल हो, तो लाइनों की तुलना ग़लत तरह का टूल है। ऐसी CSV जिसमें “डुप्लिकेट” का मतलब है दो पंक्तियां जो एक कॉलम में मेल खाती हों, स्ट्रिंग का सवाल नहीं है, और उसे ऐसा मानने से या तो डुप्लिकेट छूट जाते हैं या वे पंक्तियां हट जाती हैं जो बस एक जैसी दिखती थीं। पहले से खुली फ़ाइल के लिए स्प्रेडशीट का अपना Remove Duplicates यह ठीक से करता है, और mlr uniq -g कमांड लाइन पर फ़ैसला करने वाले फ़ील्ड का नाम लेकर, किसी भी साइज़ पर यही करता है।

ऐसी सूची के लिए जो टैब में न समाए, या जिसे आप अगले हफ़्ते फिर साफ़ करेंगे, कमांड लाइन पर स्ट्रीम करने वाला एक ही एक्सप्रेशन काफ़ी है: awk '!seen[$0]++' पहली कॉपी और ओरिजिनल क्रम रखता है, ठीक वही जो यह पेज डिफ़ॉल्ट रूप से करता है, और वह भी आपकी मेमोरी से बड़ी फ़ाइल पर। इसमें न ट्रिमिंग है, न केस को एक करना, न यह रिपोर्ट कि क्या दोहराया गया — यही सौदा है, और एक करोड़ लाइनों वाली फ़ाइल के लिए यही सही है।

अक्सर पूछे जाने वाले सवाल

क्या मेरी सूची कहीं स्टोर होती है?

नहीं। कुछ भी स्टोर नहीं किया जाता और कोई रिक्वेस्ट नहीं भेजी जाती। पेज लोड होने के बाद आप इंटरनेट बंद कर सकते हैं, और यह काम करता रहेगा।

हटाने के बाद भी डुप्लिकेट क्यों बचे हैं?

लगभग हमेशा लाइन के आख़िर के स्पेस की वजह से। अलग-अलग संख्या में स्पेस पर ख़त्म होने वाली दो लाइनें स्क्रीन पर एक जैसी दिखती हैं, पर होती नहीं, इसलिए सटीक तुलना दोनों को रख लेती है — और आप मान लेते हैं कि टूल ख़राब है। इसी वजह से यहां तुलना से पहले ट्रिम करना डिफ़ॉल्ट रूप से चालू है। ज़रूरी बात यह है कि इसका असर सिर्फ़ तुलना पर पड़ता है: जो लाइन बचती है, उसका ओरिजिनल टेक्स्ट बना रहता है, क्योंकि चुपचाप आपकी लाइनें एडिट करना “डुप्लिकेट हटाने” का मतलब नहीं है।

कौन-सी कॉपी रखी जाती है?

डिफ़ॉल्ट रूप से पहली, और बाक़ी का क्रम नहीं छेड़ा जाता — यह तब मायने रखता है जब सूची पहले से किसी मतलब वाले क्रम में हो। आप इसकी जगह आख़िरी कॉपी रख सकते हैं, या हर वह लाइन हटा सकते हैं जिसका कोई डुप्लिकेट था, जिससे सिर्फ़ वे लाइनें बचती हैं जो ठीक एक बार आईं। किसी सूची की अनोखी एंट्री ढूंढने का तरीक़ा यही आख़िरी वाला है।

सॉर्ट करने पर item10, item2 से पहले क्यों आता है?

यह आम वर्णमाला वाली सॉर्टिंग है, जिसमें “1”, “2” से पहले आता है और संख्या के बाक़ी हिस्से तक बात पहुंचती ही नहीं। नैचुरल सॉर्टिंग चालू करें, तो अंकों के समूहों की तुलना संख्या के रूप में होती है, इसलिए item2, item10 से पहले आता है — वह क्रम जिसकी इंसान उम्मीद करता है। एक्सेंट वाला टेक्स्ट भी ठीक से संभाला जाता है: सीधी तुलना “Zürich” को “Zyzzyva” के बाद रखती है, क्योंकि वह अक्षरों के बजाय उनके पीछे के नंबरों की तुलना करती है।

क्या यह बताता है कि क्या हटाया गया?

हां — जो लाइनें एक से ज़्यादा बार आईं, उनकी सूची उनकी गिनती के साथ दिखाई जाती है, सबसे ज़्यादा आने वाली सबसे पहले। यह जानना कि कौन-सी एंट्री चार बार आई, आम तौर पर यह जानने से ज़्यादा काम का है कि तीन लाइनें हट गईं।

क्या शफ़ल सच में रैंडम है?

हां। यह ब्राउज़र के क्रिप्टोग्राफ़िक रैंडम सोर्स के साथ Fisher-Yates शफ़ल इस्तेमाल करता है। आम शॉर्टकट — रैंडम तुलना से सॉर्ट करना — शफ़ल है ही नहीं: सॉर्टिंग एल्गोरिदम मानते हैं कि तुलना एक जैसी रहेगी, और रैंडम तुलना के साथ नतीजा मापने लायक हद तक ओरिजिनल क्रम की ओर झुका होता है। अगर आप किसी सूची से विजेता निकाल रहे हैं, तो यह फ़र्क़ मायने रखता है।

क्या कोई साइज़ सीमा है?

कोई तय साइज़ सीमा नहीं, उपलब्ध मेमोरी ही सीमा है। लाखों लाइनों की सूचियां आराम से चलती हैं।

ध्यान दें: सॉर्टिंग आपके ब्राउज़र के भाषा नियमों से होती है, इसलिए एक्सेंट वाले अक्षर और अलग-अलग वर्णमालाएं बाइट वैल्यू के बजाय उस क्रम में आती हैं जिसकी पाठक उम्मीद करता है। इसका मतलब यह भी है कि ब्राउज़र के हिसाब से क्रम थोड़ा अलग हो सकता है। बहुत बड़ी सूचियां पूरी की पूरी मेमोरी में रखी जाती हैं।

यह टूल अपनी वेबसाइट पर लगाएं

किसी भी ब्लॉग, क्लास पेज या हेल्प आर्टिकल के लिए मुफ़्त। एक स्निपेट पेस्ट करें और आपके विज़िटर इसे सीधे आपके पेज पर इस्तेमाल कर सकेंगे।