अद्वितीय रेखाएँ खोजें


90

मैं अद्वितीय रेखाएँ कैसे ढूँढ सकता हूँ और किसी फ़ाइल से सभी डुप्लिकेट निकाल सकता हूँ? मेरी इनपुट फ़ाइल है

1
1
2
3
5
5
7
7

मैं चाहूंगा कि परिणाम:

2
3

sort file | uniqकाम नहीं करेगा 1 बार सभी मान दिखाएगा


17
फ़ाइल को पहले सॉर्ट किया जाना चाहिए। sort file | uniq -uआपके लिए सांत्वना देने के लिए आउटपुट देगा।
ma77c

मुझे लगता है कि कारण sort file | uniqसभी मूल्यों को 1 बार दिखाता है क्योंकि यह तुरंत उस रेखा को प्रिंट करता है जो पहली बार सामना करती है, और बाद में होने वाले मुकाबलों के लिए, यह उन्हें छोड़ देता है।
ऋषभ रंजन

जवाबों:


88

uniq आपके लिए आवश्यक विकल्प है:

   -u, --unique
          only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3

32
सुनिश्चित करें कि आप फ़ाइल में प्रविष्टियाँ या पहले से छाँटे गए हैं या नहीं। Sort file.txt | uniq
user3885927

यदि आप पहले क्रमबद्ध नहीं करना चाहते हैं तो मेरा उत्तर देखें। stackoverflow.com/a/54803217/5441945
hychou

28

निम्नानुसार उपयोग करें:

sort < filea | uniq > fileb

2
यह सही नहीं है, मुझे लगता है कि आपका मतलब है:uniq -u filea > fileb
क्रिस सेमुर

1
मैं आपके डेटा की प्रतिलिपि बनाता हूं और इसे चलाता हूं और यह कार्य करता है sort<filea.txt | uniq>fileb.txt:। हो सकता है कि आपने एक्सटेंशन छोड़ दिया हो। मैं एक मैक ओएस एक्स का उपयोग कर रहा हूं। आपको filea.txtfileb.txt
कासवेरे

इसके साथ पुनर्निर्देशन की कोई आवश्यकता नहीं है sortऔर uniqजब आप sort -u file -o fileक्या कर रहे हैं तो पाइप करने की बात यह है कि आप जो कर रहे हैं वह डुप्लिकेट मानों को दूर कर रहा है यानी आपके ओपी में केवल अद्वितीय लाइनें हैं जो है और जो फ़ाइल एक्सटेंशन द्वारा हासिल की गई है, filebउसमें कुछ भी नहीं है इसके साथ, आपका जवाब गलत है। 1,2,3,5,72,3uniq -u file
क्रिस सेमोर 15

12

तुम भी बाहर अनूठा मूल्य "फाइल" में का उपयोग करके प्रिंट कर सकता है catआदेश के पाइप से sortऔरuniq

cat file | sort | uniq -u


9

uniq -u मुझे पागल कर रहा है क्योंकि यह काम नहीं करता था।

तो इसके बजाय, यदि आपके पास अजगर है (सबसे लिनक्स डिस्ट्रोस और सर्वर पहले से ही है):

मान लें कि आपके पास notUnique.txt में डेटा फ़ाइल है

#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.

uniqueData = []
fileData = open('notUnique.txt').read().split('\n')

for i in fileData:
  if i.strip()!='':
    uniqueData.append(i)

print uniqueData

###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))

ध्यान दें कि खाली लाइनों के कारण, अंतिम सेट में '' या केवल-स्थान के तार हो सकते हैं। जिसे आप बाद में हटा सकते हैं। या बस टर्मिनल से नकल के साथ दूर हो;)

#

सिर्फ FYI करें, uniq मैन पेज से:

"ध्यान दें: 'uniq' तब तक बार-बार लाइनों का पता नहीं लगाता है जब तक कि वे आसन्न न हों। आप पहले इनपुट को सॉर्ट करना चाहते हैं, या 'यूनीक' के बिना 'सॉर्ट-यू' का उपयोग कर सकते हैं। इसके अलावा, 'LC_CLLATE' द्वारा निर्दिष्ट नियमों का तुलनात्मक सम्मान करते हैं।"

सही तरीकों में से एक, के साथ आह्वान करने के लिए: # सॉर्ट nonUnique.txt | uniq

उदाहरण रन:

$ cat x
3
1
2
2
2
3
1
3

$ uniq x
3
1
2
3
1
3

$ uniq -u x
3
1
3
1
3

$ sort x | uniq
1
2
3

रिक्त स्थान मुद्रित हो सकते हैं, इसलिए तैयार रहें!


3
यह ओवरकिलिंग है।
लघुशंका

9

जबकि sortO (n log (n)) समय लगता है, मैं उपयोग करना पसंद करता हूं

awk '!seen[$0]++'

awk '!seen[$0]++'शून्य नहीं होने पर awk '!seen[$0]++ {print}', प्रिंट लाइन (= $ 0) का संक्षिप्त नाम seen[$0]है। यह अधिक स्थान लेता है लेकिन केवल O (n) समय है।


7

आप उपयोग कर सकते हैं:

sort data.txt| uniq -u

यह डेटा और विशिष्ट मानों द्वारा फ़िल्टर करता है



3

uniqयदि आप फ़ाइल को ठीक कर रहे हैं तो उसे ठीक किया जाना चाहिए / यदि आप किसी ऐसे कारण से फ़ाइल को सॉर्ट नहीं कर सकते, जिसका आप उपयोग कर सकते हैं awk:

awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'


3
sort -d "file name" | uniq -u

यह मेरे लिए एक समान काम करता है। यदि यह व्यवस्था नहीं है तो इसका उपयोग करें यदि आप इसे व्यवस्थित करते हैं तो आप इसे हटा सकते हैं



0

यह पहला प्रयास था

skilla:~# uniq -u all.sorted  

76679787
76679787 
76794979
76794979 
76869286
76869286 
......

एक बिल्ली करने के बाद-सभी

skilla:~# cat -e all.sorted 
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $

प्रत्येक दूसरी पंक्ति में एक अनुगामी स्थान होता है :( सभी अनुगामी स्थानों को हटाने के बाद यह काम करता है!

धन्यवाद

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