যদি আপনার লক্ষ্যটি সাধারণ বা অস্বাভাবিক লাইনগুলি সন্ধান comm
করা হয় তবে আমার এখানে যেতে আদেশ হবে be
এটি দুটি ফাইলের তুলনা করে এবং তিনটি কলামে লাইন দেখায় যা ফাইল 1 টির জন্য অনন্য, 2 টি ফাইলের জন্য অনন্য লাইন এবং উভয় ফাইলগুলিতে যথাক্রমে উপস্থিত রেখাগুলি। এই আউটপুটটির যে কোনওটিকে দমন করতে আপনি পতাকাগুলি পাস করতে পারেন। উদাহরণস্বরূপ comm -1 file1 file2
, প্রথম কলামটি দমন করবে, ফাইল -1-তে অনন্য জিনিস। comm -12 file1 file2
উভয় ফাইলের মধ্যে কেবল জিনিসগুলি দেখায়।
একটি বড় ক্যাভিয়েট রয়েছে: ইনপুটটি বাছাই করতে হবে। আমরা এটি প্রায় কাজ করতে পারেন।
এটি আপনাকে abc এ যা কিছু পাঠিয়েছে তা দেখাবে:
comm -23 <(sort abc.txt) <(sort mno.txt)
এবং আপনি এটিতে পাইপ করতে পারেন wc -l
একটি গণনা পেতে।
আমি যে কারণে যাচ্ছি comm
তা হ'ল একবার ফাইলগুলি বাছাই করার পরে, পাশাপাশি পাশাপাশি তুলনাটি কম্পিউটেশনালি সত্যই সহজ। যদি আপনি এই কয়েক মিলিয়ন এর সাথে লেনদেন করেন তবে এটি একটি পার্থক্য আনবে।
এটি বেশ কয়েকটি মক ফাইল দিয়ে প্রদর্শিত হতে পারে। আমার কাছে একটি মোটামুটি দ্রুত কম্পিউটার রয়েছে যাতে পদ্ধতির মধ্যে পার্থক্যটি দেখানোর জন্য আমার বেশ বড় একটি নমুনা সেট প্রয়োজন। আমি প্রতি ফাইলটিতে 10 মিলিয়ন 10-চর স্ট্রিংয়ে গিয়েছি।
$ cat /dev/urandom | tr -dc '0-9' | fold -w 10 | head -10000000 > abc.txt
$ cat /dev/urandom | tr -dc '0-9' | fold -w 10 | head -10000000 > mno.txt
$ time comm -23 <(sort abc.txt) <(sort mno.txt) | wc -l
... 0m10.653s
$ time grep -Fcxv -f abc.txt mno.txt
... 0m23.920s
$ time grep -Fcwv -f abc.txt mno.txt
... 0m40.313s
$ time awk 'NR==FNR{a[$0]++};NR!=FNR && a[$0]' abc.txt mno.txt | wc -l
... 0m12.161s
বাছাই হচ্ছে আমার বেশিরভাগ সময় নেয়। যদি আমরা ভেবে দেখি যে abc.txt স্থিতিশীল, আমরা এটি প্রাক-বাছাই করতে পারি এবং এটি ভবিষ্যতের তুলনা আরও দ্রুত করে তোলে:
$ sort abc.txt abc-sorted.txt
$ time comm -23 abc-sorted.txt <(sort mno.txt) | wc -l
... 0m7.426s
আপনি এগুলি দেখতে পারেন এবং কয়েক সেকেন্ড অপ্রাসঙ্গিক বিবেচনা করতে পারেন তবে আমি হাইলাইট করতে হবে যে এগুলি একটি উচ্চতর মেশিনে চলছে। আপনি যদি কোনও (উদাঃ) রাস্পবেরি পাই 3 এ করতে চান, আপনি খুব ধীরে ধীরে পরিবর্তন ঘুরে দেখবেন এবং পার্থক্যটি এমন এক পর্যায়ে বৃদ্ধি পাবে যা এটি গুরুত্বপূর্ণ।
grep -cxvFf abc.txt mno.txt
?