如何使用 shell 脚本比较两个文件?

如何使用 shell 脚本比较两个文件?

给定两个文件,我想编写一个 shell 脚本,从文件 1 读取每一行并检查该文件是否在文件 2 中。如果未找到某一行,则应输出两个文件不同并退出。文件可以包含单词、数字或任何内容。例如:

文件1:

Hi!
1234
5678
1111
hello

文件2:

1111
5678
1234
Hi!
hello

在这种情况下,两个文件应该相等。如果文件 2 中有“hello!!!”而不是“hello”,则这两个文件不同。我正在使用 bash 脚本。我该怎么做呢?我是否需要在嵌套循环中执行此操作并不重要,但我认为这是唯一的方法。感谢您的帮助。

答案1

在bash中:

diff --brief <(sort file1) <(sort file2)

答案2

diff设置其退出状态以指示文件是否相同。 退出状态可在特殊变量中访问$?。 您可以这样扩展 Ignacio 的答案:

diff --brief <(sort file1) <(sort file2) >/dev/null
comp_value=$?

if [ $comp_value -eq 1 ]
then
    echo "do something because they're different"
else
    echo "do something because they're identical"
fi

答案3

虽然diff这是一个非常好的答案,但我可能会使用cmp它专门对两个文件进行逐字节比较。

https://linux.die.net/man/1/cmp

因此,它具有能够比较二进制文件的额外好处。

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

diff尽管我没有亲自测试过,但我相信它比使用更快。

答案4

添加这个是因为我认为 [[ ]] && || 结构非常简洁:

#!/bin/bash

[[ `diff ${HOME}/file1 ${HOME}/file2` ]] &&  
   (echo "files different") ||
   (echo "files same")

相关内容