আমি কীভাবে দুটি ফাইলকে শেল স্ক্রিপ্টের সাথে তুলনা করব?


10

দুটি ফাইল দেওয়া, আমি একটি শেল স্ক্রিপ্ট লিখতে চাই যা ফাইল 1 থেকে প্রতিটি লাইন পড়ে এবং এটি ফাইল 2 এ আছে কিনা তা পরীক্ষা করে দেখতে পারে। যদি কোনও লাইন পাওয়া না যায় তবে দুটি ফাইল আলাদা হওয়া এবং প্রস্থান করা উচিত। ফাইলগুলিতে শব্দের সংখ্যা বা যে কোনও কিছু থাকতে পারে। উদাহরণ স্বরূপ :

file1:

Hi!
1234
5678
1111
hello

file2:

1111
5678
1234
Hi!
hello

এক্ষেত্রে দুটি ফাইল সমান হওয়া উচিত। যদি ফাইল 2 এর "হ্যালো !!!" থাকে "হ্যালো" পরিবর্তে ফাইলগুলি আলাদা। আমি বাশ স্ক্রিপ্ট ব্যবহার করছি। কিভাবে আমি এটি করতে পারব. নেস্টেড লুপে এটি করা আমার পক্ষে গুরুত্বপূর্ণ এটি নয় তবে আমি এটিই একমাত্র উপায় বলে মনে করি। আপনার সাহায্যের জন্য ধন্যবাদ.

উত্তর:


9

ব্যাশে:

diff --brief <(sort file1) <(sort file2)

ফাইলটি যদি কোনও সিএসভি ফাইল হয় তবে কী হবে। বাছাই এখনও কাজ করবে?
0x0

sortআপনি যদি না বলে থাকেন তবে নিখুঁত বিষয়বস্তু সম্পর্কে যত্ন নেই।
Ignacio Vazquez-Abram

কোন লাইনের পার্থক্য খুঁজে পাওয়া সম্ভব?
0x0

সরান --briefএবং বিন্যাস অপশন যোগ, যেমন -u
Ignacio Vazquez-Abram

10

diffফাইলগুলি একই কিনা তা চিহ্নিত করতে এর প্রস্থান স্থিতি সেট করে। প্রস্থান স্থিতি বিশেষ পরিবর্তনশীল অ্যাক্সেসযোগ্য $?। আপনি Ignacio এর উত্তর এভাবে প্রসারিত করতে পারেন:

diff --brief <(sort file1) <(sort file2) >/dev/null
comp_value=$?

if [ $comp_value -eq 1 ]
then
    echo "do something because they're different"
else
    echo "do something because they're identical"
fi

3
আপনি কেবল if diff ... >/dev/nullবন্ধনী এবং পরিবর্তনশীল ছাড়াই করতে পারেন ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1

এটি যুক্ত করা কারণ আমি মনে করি [[]] && || নির্মাণ সুন্দর ঝরঝরে:

#!/bin/bash

[[ `diff ${HOME}/file1 ${HOME}/file2` ]] &&  
   (echo "files different") ||
   (echo "files same")

1

এছাড়াও কাজ করা উচিত:

comm -3 file1 file2

আমি মনে করি এটি উত্তরের জন্য যথেষ্ট অক্ষর ...


1

যদিও diffপুরোপুরি সূক্ষ্ম উত্তর, আমি সম্ভবত এর cmpপরিবর্তে ব্যবহার করব যা বিশেষত দুটি ফাইলের সাথে বাইট বাই তুলনা করার জন্য।

https://linux.die.net/man/1/cmp

এর কারণে, এতে বাইনারি ফাইলগুলির তুলনা করতে সক্ষম হওয়ার যুক্ত বোনাস রয়েছে।

if cmp -s "file1" "file2"
then
   echo "The files match"
else
   echo "The files are different"
fi

আমি এটি ব্যবহার করার চেয়ে দ্রুত বিশ্বাস করতে পরিচালিত diffকরেছি যদিও আমি ব্যক্তিগতভাবে এটি পরীক্ষা করেছি না।


"ফাইলগুলি পৃথক পৃথক" ক্ষেত্রে কি প্রথমে যাবে না? যদি পরীক্ষাটি জিজ্ঞাসা করে যে কিছু সত্য, অর্থাত্ একটি ননজারো রিটার্ন কোড। ফাইলগুলি মিলে গেলে, সিএমপি 0 (ম্যানপেজ প্রতি) দেয় এবং তাই এটি দ্বিতীয় ক্ষেত্রে হওয়া উচিত।
ব্যবহারকারী8162

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