CSV फ़ाइल से डुप्लिकेट प्रविष्टियाँ निकालें


13

मुझे डुप्लिकेट डुपटर के साथ एक [सीएसवी] फाइल मिली है, जो एक ही डेटा दो बार छपी है। मैं तरह की uniq का उपयोग करने की कोशिश की है, sort myfile.csv | uniq -uहालांकि इसमें कोई बदलाव नहीं हुआ है myfile.csv, मैंने भी कोशिश की है sudo sort myfile.csv | uniq -uलेकिन कोई फर्क नहीं पड़ा है ।

तो वर्तमान में मेरी सीएसवी फ़ाइल इस तरह दिखती है

a
a
a
b
b
c
c
c
c
c

मैं इसे देखना चाहूंगा

a
b
c

sort -u myfile.csv> tmp.csv; mv -f tmp.csv myfile.csv
आर्केम

आपके अनुसार man sort, आप "जगह में" सॉर्ट नहीं कर सकते।
अर्चेमार

आप टर्मिनल पर भरोसा न करने की भी कोशिश कर सकते हैं। आप इस ऑनलाइन टूल को इसके बजाय textmechanic.com/text-tools/basic-text-tools/…
Aminah Nuraini

जवाबों:


16

कारण myfile.csvनहीं बदल रहा है, क्योंकि इसके लिए -uविकल्प केवल अद्वितीय लाइनें प्रिंट uniqकरेगा । इस फ़ाइल में, सभी लाइनें डुप्लिकेट हैं, इसलिए उन्हें प्रिंट नहीं किया जाएगा ।

हालाँकि, इससे भी महत्वपूर्ण बात यह है कि आउटपुट सेव नहीं किया जाएगा myfile.csvक्योंकि uniqयह केवल इसे प्रिंट करेगा stdout(डिफ़ॉल्ट रूप से, आपका कंसोल)।

आपको ऐसा कुछ करने की आवश्यकता होगी:

$ sort -u myfile.csv -o myfile.csv

विकल्प का मतलब है:

  • -u - केवल अनोखी लाइनें रखें
  • -o - के बजाय इस फ़ाइल के लिए उत्पादन stdout

आपको man sortअधिक जानकारी के लिए देखना चाहिए ।


3

जैसा कि बेलमिन ने दिखाया, सॉर्ट महान है। उनका जवाब बिना डेटा के सबसे अच्छा है, और यह याद रखना और उपयोग करना आसान है।

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

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

अजीब धार मामला है, लेकिन यह समय-समय पर सामने आता है।

इसके अलावा, यदि आपका डेटा पहले से ही सॉर्ट किया जा रहा है जब आप इसे देख रहे हैं, तो आप यूनीक चला सकते हैं।

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

मेरे दोनों सुझावों में दोष यह है कि आपको एक अस्थायी फ़ाइल का उपयोग करना होगा और उसे वापस कॉपी करना होगा।


2

uniq -u केवल अद्वितीय लाइनों मुद्रित करें। आपके इनपुट में कोई अद्वितीय रेखाएँ नहीं हैं, इसलिए uniq -uकुछ भी न छापें। आपको केवल आवश्यकता है sort:

sort -u myfile.csv

2

यदि आप फ़ाइल के क्रम को बनाए रखना चाहते हैं (क्रमबद्ध नहीं) लेकिन फिर भी डुप्लिकेट को हटा दें तो आप ऐसा भी कर सकते हैं

awk '!v[$1]++' /tmp/file

उदाहरण के लिए

d
d
a
a
b
b
c
c
c
c
c

इसका उत्पादन होगा

d
a
b
c

क्या आप सिंटैक्स पर विस्तार कर सकते हैं?
शोपाजो डे एरियेरेज़

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