2012-10-04 205 views
13

我想知道是否有人可以告訴我,如果在unix中有可用的函數,bash會比較文件的所有行。如果它們不同,它應該輸出true/false,或-1,0,1。我知道這些cmp函數以其他語言存在。我一直在看附近的手冊頁,但沒有成功。如果它不可用,有人能幫我想出一個替代解決方案嗎?比較Unix中兩個文本文件的比較函數

感謝

+0

'的diff -u file1的file2'注:DIFF的輸出可以(並將)可以由所使用的'patch'程序將file1編輯成file2(反之亦然) – wildplasser

回答

1

您可以使用diff,它輸出兩個文件之間的差異,返回1,如果它們是不同的,0,如果它們是相同的。

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

你能解釋一下這個好一點嗎? toto和tota是...? – Masterminder

+0

我輸出到文件中的字符串。然後我比較每個文件,包含toto的file1,包含tota的file2。 – tomahh

+0

然後< toto --- > tota? thx btw – Masterminder

0

你可以做兩個文件的md5,然後在bash比較結果。

這裏沒有Unix盒子來測試,但是這應該是正確的。

#!/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 s到使用:

if cmp file1 file1; then 
    ... 
fi 

希望這有助於=)

+1

只是打敗了我。 :-)添加一個'-s'選項將確保它對不同的文件保持沉默,並且只提供返回代碼,所以你不會獲得額外的輸出 – TaninDirect

31

有幾種方法可以做到這一點:

  • cmp -s $file1 $file2:看看$?的值。如果兩個文件匹配,則爲零,否則爲非零。
  • diff $file1 $file2 > /dev/nulldiff命令的某些形式可以帶一個參數,告訴它不輸出任何內容。但是,大多數不會。畢竟,您使用diff來查看兩個文件之間的差異。再次,退出代碼(可以查詢$?值將爲0,如果文件匹配和非零否則

您可以在shell中使用這些命令if語句:

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#打印如果兩個文件都相同