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


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.