1. Learn
  2. /
  3. कोर्स
  4. /
  5. Shell परिचय

Connected

अभ्यास

मैं डुप्लिकेट लाइनों को कैसे हटाऊँ?

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) स्थित डुप्लिकेट लाइनों को हटाना हो, तो उसे पूरी फ़ाइल मेमोरी में रखनी पड़ेगी (या कम से कम, अब तक देखी गई सारी यूनिक लाइनों को)। सिर्फ़ पास-पास वाले डुप्लिकेट हटाने से उसे मेमोरी में केवल सबसे हाल की यूनिक लाइन ही रखनी पड़ती है।

निर्देश

100 XP

एक पाइपलाइन लिखिए जो:

  • seasonal/winter.csv की दूसरी कॉलम निकाले,
  • आउटपुट में से "Tooth" शब्द हटाए ताकि केवल दाँतों के नाम दिखें,
  • आउटपुट को sort करे ताकि किसी भी दाँत के नाम की सारी आवृत्तियाँ पास-पास आ जाएँ; और
  • हर दाँत का नाम केवल एक बार उसके आने की गिनती के साथ दिखाए।

आपकी पाइपलाइन की शुरुआत पिछले अभ्यास जैसी ही है:

cut -d , -f 2 seasonal/winter.csv | grep -v Tooth

इसे sort कमांड से बढ़ाइए, और uniq -c का उपयोग कीजिए ताकि प्रत्येक यूनिक लाइन उसके कुल काउंट के साथ दिखे, बजाय uniq और wc को साथ में इस्तेमाल करने के।