我想知道是否有人可以告訴我,如果在unix中有可用的函數,bash會比較文件的所有行。如果它們不同,它應該輸出true/false,或-1,0,1。我知道這些cmp函數以其他語言存在。我一直在看附近的手冊頁,但沒有成功。如果它不可用,有人能幫我想出一個替代解決方案嗎?比較Unix中兩個文本文件的比較函數
感謝
我想知道是否有人可以告訴我,如果在unix中有可用的函數,bash會比較文件的所有行。如果它們不同,它應該輸出true/false,或-1,0,1。我知道這些cmp函數以其他語言存在。我一直在看附近的手冊頁,但沒有成功。如果它不可用,有人能幫我想出一個替代解決方案嗎?比較Unix中兩個文本文件的比較函數
感謝
您可以使用diff,它輸出兩個文件之間的差異,返回1,如果它們是不同的,0,如果它們是相同的。
$> echo toto > file1; echo tota file2; diff file1 file2
1c1
< toto
---
> tota
你能解釋一下這個好一點嗎? toto和tota是...? – Masterminder
我輸出到文件中的字符串。然後我比較每個文件,包含toto的file1,包含tota的file2。 – tomahh
然後< toto --- > tota? thx btw – Masterminder
你可以做兩個文件的md5,然後在bash
比較結果。
這裏沒有Unix盒子來測試,但是這應該是正確的。
#!/bin/bash
md1=$(md5 file1);
md2=$(md5 file2);
if [ $md1 -eq $ $md2 ]; then
echo The same
else
echo Different
fi
有一個簡單的cmp file file
命令可以做到這一點。它返回0,如果他們是平等的,1,如果它們是不同的,所以它的瑣碎if
s到使用:
if cmp file1 file1; then
...
fi
希望這有助於=)
只是打敗了我。 :-)添加一個'-s'選項將確保它對不同的文件保持沉默,並且只提供返回代碼,所以你不會獲得額外的輸出 – TaninDirect
有幾種方法可以做到這一點:
cmp -s $file1 $file2
:看看$?
的值。如果兩個文件匹配,則爲零,否則爲非零。diff $file1 $file2 > /dev/null
:diff
命令的某些形式可以帶一個參數,告訴它不輸出任何內容。但是,大多數不會。畢竟,您使用diff
來查看兩個文件之間的差異。再次,退出代碼(可以查詢$?
值將爲0,如果文件匹配和非零否則您可以在shell中使用這些命令if語句:
if cmp -s "$file1" "$file2"
then
echo "The files match"
else
echo "The files are different"
fi
該diff
命令對文本文件明確提出,將cmp
命令應與所有二進制文件工作過。
#!/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
回聲「讀一號文件」 讀F1 回聲 「讀取第二文件」 讀F2
DIFF -s F1 F2#打印如果兩個文件都相同
'的diff -u file1的file2'注:DIFF的輸出可以(並將)可以由所使用的'patch'程序將file1編輯成file2(反之亦然) – wildplasser