मैं डुप्लिकेट लाइनों को कैसे हटाऊँ?
sort के साथ अक्सर इस्तेमाल होने वाली एक और कमांड uniq है,
जिसका काम डुप्लिकेट लाइनों को हटाना है।
ज़्यादा सटीक रूप से कहें तो,
यह केवल पास-पास (adjacent) आई हुई डुप्लिकेट लाइनों को हटाती है।
अगर किसी फ़ाइल में यह हो:
2017-07-03
2017-07-03
2017-08-03
2017-08-03
तो uniq यह आउटपुट देगी:
2017-07-03
2017-08-03
लेकिन अगर इसमें यह हो:
2017-07-03
2017-08-03
2017-07-03
2017-08-03
तो uniq सारी चार लाइनें प्रिंट करेगी।
कारण यह है कि uniq बहुत बड़ी फ़ाइलों के साथ काम करने के लिए बनाई गई है।
यदि उसे फ़ाइल से दूर-दूर (non-adjacent) स्थित डुप्लिकेट लाइनों को हटाना हो,
तो उसे पूरी फ़ाइल मेमोरी में रखनी पड़ेगी
(या कम से कम,
अब तक देखी गई सारी यूनिक लाइनों को)।
सिर्फ़ पास-पास वाले डुप्लिकेट हटाने से
उसे मेमोरी में केवल सबसे हाल की यूनिक लाइन ही रखनी पड़ती है।
यह अभ्यास पाठ्यक्रम का हिस्सा है
Shell परिचय
अभ्यास निर्देश
एक पाइपलाइन लिखिए जो:
seasonal/winter.csvकी दूसरी कॉलम निकाले,- आउटपुट में से "Tooth" शब्द हटाए ताकि केवल दाँतों के नाम दिखें,
- आउटपुट को sort करे ताकि किसी भी दाँत के नाम की सारी आवृत्तियाँ पास-पास आ जाएँ; और
- हर दाँत का नाम केवल एक बार उसके आने की गिनती के साथ दिखाए।
आपकी पाइपलाइन की शुरुआत पिछले अभ्यास जैसी ही है:
cut -d , -f 2 seasonal/winter.csv | grep -v Tooth
इसे sort कमांड से बढ़ाइए, और uniq -c का उपयोग कीजिए ताकि प्रत्येक यूनिक लाइन उसके कुल काउंट के साथ दिखे, बजाय uniq और wc को साथ में इस्तेमाल करने के।
इंटरैक्टिव व्यावहारिक अभ्यास
हमारे इंटरैक्टिव अभ्यासों में से किसी एक के साथ सिद्धांत को व्यवहार में बदलें
अभ्यास शुरू करें