繁体   English   中英

比较 Unix 中两个文本文件的比较函数

[英]Comparison function that compares two text files in Unix

我想知道是否有人可以告诉我 unix 中是否有一个函数可用,bash 可以比较文件的所有行。 如果它们不同,则应输出 true/false 或 -1,0,1。 我知道这些 cmp 函数存在于其他语言中。 我一直在查看手册页,但没有成功。 如果它不可用,有人可以帮我想出替代解决方案吗?

谢谢

做这件事有很多种方法:

  • 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命令也适用于所有二进制文件。

有一个简单的cmp file file命令可以做到这一点。 如果它们相等则返回 0,如果它们不同则返回 1,因此在if s 中使用很简单:

if cmp file1 file1; then
    ...
fi

希望这会有所帮助 =)

#!/bin/bash

file1=old.txt
file2=new.txt

echo " TEST 1 : "
echo

if [ $( cmp -s ${file1} ${file2}) ]
then
   echo "The files match :  ${file1} - ${file2}"
else
   echo "The files are different :  ${file1} - ${file2}"
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 : md5 / md5sum - compute and check MD5 message digest"
echo

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

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

# or md5sum depends on your linux flavour :D
#md1=$(md5sum ${file1});
#md2=$(md5sum ${file2});

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

echo $md1
echo $mdd1
echo $md2
echo $mdd2
echo

#if [ $mdd1 = $mdd2 ]; 
if [ $mdd1 -eq $mdd2 ]; 
then
   echo "The files match :  ${file1} - ${file2}"
else
   echo "The files are different :  ${file1} - ${file2}"
fi

您可以对这两个文件执行md5 ,然后比较bash的结果。

这里没有 Unix box 来测试,但这应该是正确的。

#!/bin/bash

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

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

echo "读取第一个文件" 读取 f1 echo "读取第二个文件" 读取 f2

diff -s f1 f2 # 打印两个文件是否相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM