बिना किसी कॉलम के डुप्लिकेट के आधार पर लाइनों को हटा दें


30

मेरे पास बड़ी 3-कॉलम फाइलें (~ 10,000 लाइनें) हैं और मैं उस लाइन को हटाना चाहूंगा जब उस लाइन के तीसरे कॉलम की सामग्री दूसरी लाइन के तीसरे कॉलम में दिखाई दे। फ़ाइलों का आकार थोड़ा बोझिल हो जाता है, और मैं नीचे दिए गए कोड की तरह कुछ का उपयोग नहीं कर सकता क्योंकि पूरी लाइनें समान नहीं हैं; केवल कॉलम 3 की सामग्री।

awk '!seen[$0]++' filename

जवाबों:


31

आप अपने awk कमांड को उस कॉलम में बदलें जिसे आप (आपके मामले के तीसरे कॉलम में) के आधार पर डुप्लिकेट की गई लाइनों को हटाने के लिए प्रदर्शन करना चाहते हैं:

awk '!seen[$3]++' filename

यह कमांड बता रही है कि awkकिन लाइनों को प्रिंट करना है। चर $3स्तंभ 3 की पूरी सामग्री रखता है और वर्ग कोष्ठक सरणी पहुंच है। तो, फ़ाइल नाम में लाइन के प्रत्येक तीसरे कॉलम के लिए, नाम के एरे seenका नोड बढ़ा हुआ है और यदि उस नोड (कॉलम 3) की सामग्री !पहले से सेट नहीं थी तो प्रिंट की गई लाइन ।

ऊपर awkयदि इनपुट फ़ाइल में अपने कॉलम के साथ सीमांकित कर रहे हैं आदेश काम करेंगे spaceया Tab, themself के बीच यदि कॉलम किसी और कार्य में सीमांकित, आप अपनी साथ awk को यह बताने की आवश्यकता -Fविकल्प। उदाहरण के लिए, यदि सभी कॉलम अल्पविराम ( ,) के साथ सीमांकित होते हैं और तीसरे स्तंभ के उपयोग के -F','विकल्प के आधार पर लाइनों को हटाना चाहते हैं ।

awk -F',' '!seen[$3]++' filename

18

sortआदेश बड़ी फ़ाइलों को संभालने के लिए पहले से ही अनुकूलित है। तो, आप बहुत अच्छी तरह से sortअपनी फ़ाइल पर कमांड का उपयोग कर सकते हैं ,

sort -u -t' ' -k3,3 file
  • -u - केवल अनूठी पंक्तियों को प्रिंट करें।
  • -t- सीमांकक निर्दिष्ट करें। यहाँ इस उदाहरण में, मैं केवल सीमांकक के रूप में स्थान का उपयोग करता हूं।
  • -k3,3 - 3rd फ़ील्ड पर सॉर्ट करें।

आप इस उत्तर को संदर्भित कर सकते हैं जो बताता है कि जीएनयू सॉर्ट वास्तव में बड़ी फ़ाइलों को छांटने के लिए बेहतर दृष्टिकोण है। आपके मामले में, मुझे लगता है कि इसके बिना भी -parallel, आप बिना समय की देरी के अपना अंतिम परिणाम प्राप्त कर सकते हैं।


स्नार्कली टिप्पणी करने वाला था जो -uकेवल डुप्लिकेट लाइनों को हटा देगा , डुप्लिकेट कुंजियों को नहीं ... लेकिन मैं गलत हूं।
रैंडम्स

@ रमेश यह काम करता है लेकिन सॉर्टिंग लाइनों के अनुक्रम को बदल देती है जो मुझे लगता है कि हमेशा अपेक्षित नहीं है।
Bharat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.