2012-10-04 18 views
13

में दो टेक्स्ट फ़ाइलों की तुलना करता है, मैं सोच रहा था कि अगर कोई मुझे बता सकता है कि यूनिक्स में कोई फ़ंक्शन उपलब्ध है, तो बैश जो फ़ाइलों की सभी पंक्तियों की तुलना करता है। यदि वे अलग हैं तो इसे सही/गलत, या -1,0,1 आउटपुट करना चाहिए। मुझे पता है कि इन सीएमपी कार्यों को अन्य भाषाओं में मौजूद है। मैं मैन पेजों के चारों ओर देख रहा हूं लेकिन असफल रहा हूं। यदि यह उपलब्ध नहीं है, तो क्या कोई मुझे वैकल्पिक समाधान के साथ आने में मदद कर सकता है?तुलना फ़ंक्शन जो यूनिक्स

धन्यवाद

+0

'diff -u file1 file2' नोट यदि दोनों फ़ाइलों को समान कर रहे हैं: भिन्नता के निर्गम (और होगा) द्वारा इस्तेमाल किया जा सकता फ़ाइल 1 में फ़ाइल 1 को संपादित करने के लिए 'पैच' प्रोग्राम (या इसके विपरीत) – wildplasser

उत्तर

1

आप diff है, जो दो फ़ाइलों के बीच अंतर आउटपुट का उपयोग कर और 0 लौट 1 यदि वे अलग हैं, अगर वे एक ही कर रहे हैं कर सकते हैं।

$> echo toto > file1; echo tota file2; diff file1 file2 
1c1 
< toto 
--- 
> tota 
+0

क्या आप इसे थोड़ा बेहतर समझा सकते हैं? टोटो और टोटा हैं ...? – Masterminder

+0

तार जो मैं एक फ़ाइल में आउटपुट करता हूं। मैं फिर प्रत्येक फ़ाइल की तुलना करता हूं, फ़ाइल 1 जिसमें टोटो, फ़ाइल 2 होता है जिसमें टोटा होता है। – tomahh

+0

और फिर < toto --- > टोटा? thx btw – Masterminder

0

आप दो फाइलों पर एक md5 कर सकता है, तो bash में परिणामों की तुलना।

परीक्षण करने के लिए यहां कोई यूनिक्स बॉक्स नहीं है, लेकिन यह सही होना चाहिए।

#!/bin/bash 

md1=$(md5 file1); 
md2=$(md5 file2); 

if [ $md1 -eq $ $md2 ]; then 
    echo The same 
else 
    echo Different 
fi 
3

एक साधारण cmp file file कमांड है जो बस करता है। यह रिटर्न 0 अगर वे बराबर हैं और 1 वे अलग हैं, तो यह if रों में उपयोग करने के लिए तुच्छ है यदि:

if cmp file1 file1; then 
    ... 
fi 

आशा इस = मदद करता है)

+1

बस मुझे इसे हराया। :-) '-s' विकल्प जोड़ना यह सुनिश्चित करेगा कि यह अलग-अलग फ़ाइलों के लिए चुप है और केवल रिटर्न कोड प्रदान करता है ताकि आपको अतिरिक्त आउटपुट न मिले – TaninDirect

31

ऐसा करने के कई तरीके हैं:

  • cmp -s $file1 $file2: $? के मान को देखें। शून्य अगर दोनों फाइलें मेल खाते हैं या अन्यथा शून्य नहीं हैं।
  • diff $file1 $file2 > /dev/null: diff कमांड के कुछ रूप एक पैरामीटर ले सकते हैं जो इसे कुछ भी आउटपुट न करने के लिए कहता है। हालांकि, ज्यादातर नहीं करते हैं। आखिरकार, आप दो फ़ाइलों के बीच अंतर देखने के लिए diff का उपयोग करें। फिर, बाहर निकलने के कोड (अगर जांच कर सकते हैं फ़ाइलों से मेल खाते हैं और गैर शून्य अन्यथा $? का मान 0 हो जाएगा

आप एक खोल में इन आदेश का उपयोग कर सकते हैं अगर बयान:।

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

diff आदेश पाठ फ़ाइलों के लिए विशेष रूप से किया जाता है। cmp आदेश भी सभी द्विआधारी फाइलों के साथ काम करना चाहिए।

1
#!/bin/bash 

file1=old.txt 
file2=new.txt 

echo " TEST 1 : " 
echo 

if [ $(cmp -s ${file1} ${file2}) ] 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

echo 
echo " TEST 2 : " 
echo 
bool=$(cmp -s "$file1" "$file2") 
if cmp -s "$file1" "$file2" 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

echo 
echo " TEST 3 : " 
echo 

md1=$(md5 ${file1}); 
md2=$(md5 ${file2}); 

mdd1=$(echo $md1 | awk '{print $4}') 
mdd2=$(echo $md2 | awk '{print $4}') 
echo $md1 
echo $mdd1 
echo $md2 
echo $mdd2 
echo 

if [ $mdd1 = $mdd2 ]; 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 
0

गूंज "पहले फ़ाइल को पढ़ने" पढ़ने f1 गूंज "दूसरी फ़ाइल को पढ़ने" f2

पढ़

diff -s f1 f2 # प्रिंट

संबंधित मुद्दे