ধরুন আমার কাছে নীচের মতো ফাইল রয়েছে:
123
123
234
234
123
345
আমি খুঁজে পেতে চাই যে '123' কতবার নকল হয়েছিল, কতবার '234' নকল হয়েছিল, ইত্যাদি। সুতরাং আদর্শভাবে, আউটপুটটি এরকম হবে:
123 3
234 2
345 1
ধরুন আমার কাছে নীচের মতো ফাইল রয়েছে:
123
123
234
234
123
345
আমি খুঁজে পেতে চাই যে '123' কতবার নকল হয়েছিল, কতবার '234' নকল হয়েছিল, ইত্যাদি। সুতরাং আদর্শভাবে, আউটপুটটি এরকম হবে:
123 3
234 2
345 1
উত্তর:
ধরে নিই যে প্রতি লাইনে একটি নম্বর রয়েছে:
sort <file> | uniq -c
আপনি আরও ভার্বোজ ব্যবহার করতে পারেন --count
জিএনইউ সংস্করণ যেমন লিনাক্সে পতাকা :
sort <file> | uniq --count
sort
করতে পারেন:sort <file> | uniq -c | sort -n
এটি কেবল সদৃশ লাইনগুলি প্রিন্ট করবে :
sort FILE | uniq -cd
বা, জিএনইউ দীর্ঘ বিকল্পের সাথে (লিনাক্সে):
sort FILE | uniq --count --repeated
উপর বাসদ এবং ওএসএক্স আপনি, grep ব্যবহার করতে হবে অনন্য লাইন ফিল্টার করার জন্য:
sort FILE | uniq -c | grep -v '^ *1 '
প্রদত্ত উদাহরণের জন্য, ফলাফলটি হবে:
3 123
2 234
আপনি যদি কেবল একবারে প্রদর্শিত হয় সেগুলি সহ সমস্ত লাইনের জন্য মুদ্রণ করতে চান :
sort FILE | uniq -c
বা, জিএনইউ দীর্ঘ বিকল্পের সাথে (লিনাক্সে):
sort FILE | uniq --count
প্রদত্ত ইনপুটটির জন্য, আউটপুটটি হ'ল:
3 123
2 234
1 345
অর্ডার করার জন্য আউটপুট সাজাতে উপরে অধিকাংশ ঘন লাইন সঙ্গে, আপনি (সমস্ত ফলাফল পেতে) নিম্নলিখিতগুলি করতে পারেন:
sort FILE | uniq -c | sort -nr
বা, কেবলমাত্র অনুলিপি লাইন পেতে, সর্বাধিক ঘন ঘন:
sort FILE | uniq -cd | sort -nr
ওএসএক্স এবং বিএসডি-তে চূড়ান্ত হয়:
sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
| sort -n
বা | sort -nr
পাইপে পুনরাবৃত্তি গণনা (যথাক্রমে আরোহণ বা উতরাই ) দ্বারা আউটপুটটিকে সাজান। এটি যা আপনি জিজ্ঞাসা করছেন তা নয় তবে আমি ভেবেছিলাম এটি সাহায্য করতে পারে।
| awk '$1>100'
sort FILE | uniq -c | grep -v '^ *1 '
এর মাধ্যমে awk:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
ইন awk 'dups[$1]++'
কমান্ড পরিবর্তনশীল $1
COLUMN1 সমগ্র সামগ্রী ঝুলিতে এবং বর্গাকার বন্ধনী অ্যারের এক্সেস আছে। সুতরাং, data
ফাইলের প্রতিটি লাইনের প্রথম কলামের জন্য , নামের অ্যারের নোড dups
বৃদ্ধি করা হয়।
এবং শেষে, আমরা ভেরিয়েবলের dups
সাথে অ্যারের উপরে লুপ করছি num
এবং সেভ করা সংখ্যাগুলি প্রথমে মুদ্রণ করুন তারপরে তাদের নকল মানের সংখ্যাটি dups[num]
।
মনে রাখবেন যে আপনার ইনপুট ফাইলটির কয়েকটি লাইনের শেষে ফাঁকা জায়গা রয়েছে, যদি আপনি সেগুলি সাফ করেন, আপনি উপরের কমান্ডের $0
জায়গায় ব্যবহার করতে পারেন $1
:)
uniq
?
sort | uniq
এবং অ্যাজকের সমাধানটিতে বেশ আলাদা পারফরম্যান্স এবং রিসোর্স ট্রেড-অফ রয়েছে: ফাইলগুলি যদি বড় হয় এবং বিভিন্ন লাইনের সংখ্যা কম হয় তবে আঙ্ক সমাধানটি আরও কার্যকর। এটি লাইনের সংখ্যায় লিনিয়ার এবং স্থান ব্যবহার বিভিন্ন লাইনের সংখ্যায় লিনিয়ার। OTOH, awk সমাধানটির জন্য মেমরিতে সমস্ত ভিন্ন লাইন রাখা দরকার, যখন (GNU) বাছাই করা টেম্প ফাইলগুলি অবলম্বন করতে পারে।
উইন্ডোজগুলিতে "উইন্ডোজ পাওয়ারশেল" ব্যবহার করে আমি এটি অর্জনের জন্য নীচের বর্ণিত কমান্ডটি ব্যবহার করেছি
Get-Content .\file.txt | Group-Object | Select Name, Count
ফলাফলটি ফিল্টার করতে আমরা যেখানে-অবজেক্ট Cmdlet ব্যবহার করতে পারি
Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count
ধরে নিই যে আপনি একটি স্ট্যান্ডার্ড ইউনিক্স শেল এবং / অথবা সাইগউইন পরিবেশে অ্যাক্সেস পেয়েছেন:
tr -s ' ' '\n' < yourfile | sort | uniq -d -c
^--space char
মূলত: সমস্ত স্থানের অক্ষরগুলিকে লাইনব্রেকগুলিতে রূপান্তর করুন, তারপরে ট্রান্সলেস্টেড আউটপুটটি সাজান এবং এটিকে ইউনিক করতে এবং নকল লাইনগুলি গণনা করুন।