অনন্য লাইন সন্ধান করুন


90

আমি কীভাবে অনন্য লাইনগুলি খুঁজে পেতে পারি এবং একটি ফাইল থেকে সমস্ত নকল মুছে ফেলতে পারি? আমার ইনপুট ফাইলটি

1
1
2
3
5
5
7
7

আমি ফলাফলটি চাই:

2
3

sort file | uniqকাজ করবে না। সমস্ত মান 1 বার প্রদর্শিত হবে


17
ফাইলটি প্রথমে বাছাই করতে হবে। sort file | uniq -uআপনার জন্য কনসোল আউটপুট হবে।
ma77c

আমি মনে করি কারণটি sort file | uniq1 বার সমস্ত মান দেখায় কারণ এটি তাত্ক্ষণিকভাবে প্রথম বারের মতো লাইনটি মুদ্রণ করে এবং পরবর্তী এনকাউন্টারগুলির জন্য, এটি কেবল তাদের এড়িয়ে যায়।
রিশভ রঞ্জন

উত্তর:


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
আপনি যদি ফাইলের এন্ট্রিগুলি ইতিমধ্যে বাছাই না করে বাছাই করেন তা নিশ্চিত করুন। বাছাই file.txt | uniq
ব্যবহারকারী 3885927

আপনি যদি প্রথমে বাছাই করতে না চান তবে আমার উত্তরটি দেখুন। stackoverflow.com/a/54803217/5441945
hychou

28

নিম্নলিখিত হিসাবে ব্যবহার করুন:

sort < filea | uniq > fileb

4
এটি সঠিক নয়, আমি মনে করি আপনি বোঝাতে চেয়েছিলেন:uniq -u filea > fileb
ক্রিস সিমুর

4
আমি আপনার ডেটা কপি এবং এটি চালানোর এবং এটি কাজ করে: sort<filea.txt | uniq>fileb.txt। হতে পারে আপনি এক্সটেনশানগুলি রেখে গেছেন। আমি একটি ম্যাক ওএস এক্স ব্যবহার করছি। আপনাকে filea.txtঅন্য কোনও ব্যক্তির কাছ থেকে যেতে হবেfileb.txt
কাসাভবেরে

এর সাথে পুনঃনির্দেশের প্রয়োজন নেই sortএবং পাইপিংয়ের বিন্দুটি কী হবে uniqযখন আপনি কেবল sort -u file -o fileযা করতে পারছেন তা হুবহু মানগুলি মুছে ফেলছে অর্থাত্ আপনার ওপিতে filebরয়েছে 1,2,3,5,7অনন্য লাইনগুলি যা কেবল ফাইল এক্সটেনশনের 2,3দ্বারা অর্জন করা যায় uniq -u fileতা চায় না এটির সাথে আপনার উত্তরটি ভুল।
ক্রিস সিমুর

12

এছাড়া আপনি অনন্য মান "ফাইল" -এ ব্যবহার করে মুদ্রণ করতে পারে catকমান্ড বংশীধ্বনিতুল্য দ্বারা sortএবংuniq

cat file | sort | uniq -u


9

ইউনিক-ইউ কাজ করে না বলে আমাকে পাগল করে চলেছে।

সুতরাং এর পরিবর্তে, যদি আপনার অজগর থাকে (বেশিরভাগ লিনাক্সের ডিস্ট্রোস এবং সার্ভারগুলি ইতিমধ্যে রয়েছে):

ধরে নিচ্ছি আপনার কাছে ইউটিউইক.টিএসটিতে ডাটা ফাইল রয়েছে

#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'))

নোট করুন যে খালি রেখার কারণে, চূড়ান্ত সেটে '' বা কেবলমাত্র স্থানের স্ট্রিং থাকতে পারে। আপনি এটি পরে মুছে ফেলতে পারেন। অথবা কেবল টার্মিনাল থেকে অনুলিপি করে পালিয়ে যান;)

#

জাস্ট এফআইআই, ইউনিক ম্যান পৃষ্ঠা থেকে:

"দ্রষ্টব্য: 'ইউনিীক' পুনরাবৃত্ত রেখাগুলি যদি সংলগ্ন না হয় তবে সনাক্ত করে না You

এর সাথে অনুরোধ করার জন্য সঠিক উপায়গুলির মধ্যে একটি: # সাজানো ননউইনিক.টিএসটিএস্ট | ইউনিক

উদাহরণ রান:

$ 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

স্পেসগুলি মুদ্রিত হতে পারে, তাই প্রস্তুত থাকুন!


4
এটি ওভারকিলিং।
স্মৃতিচেস

9

যদিও sortহে লাগে (ঢ লগ ইন করুন (ঢ)) সময়, আমি ব্যবহার পছন্দ

awk '!seen[$0]++'

awk '!seen[$0]++'শূন্য না awk '!seen[$0]++ {print}'হলে মুদ্রণ লাইন (= $ 0) এর সংক্ষেপণ seen[$0]। এটি আরও স্থান নেয় তবে কেবল ও (এন) সময়।


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 
......

একটি বিড়াল করার পরে all.sort

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

প্রতি দ্বিতীয় লাইনে একটি পিছনের স্থান রয়েছে :( সমস্ত পেছনের জায়গাগুলি মুছে ফেলার পরে এটি কাজ করেছিল!

ধন্যবাদ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.