2012-10-04 203 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#打印如果两个文件都相同