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

0x0*_*0x0 11 unix script bash

给定两个文件,我想编写一个 shell 脚本,从 file1 读取每一行并检查它是否在 file2 中。如果没有找到一行,它应该输出两个不同的文件并退出。这些文件可以包含字数或任何内容。例如 :

文件1:

Hi!
1234
5678
1111
hello
Run Code Online (Sandbox Code Playgroud)

文件2:

1111
5678
1234
Hi!
hello
Run Code Online (Sandbox Code Playgroud)

在这种情况下,两个文件应该相等。如果 file2 有“你好!!!” 而不是“你好”,那么文件是不同的。我正在使用 bash 脚本。我怎样才能做到这一点。我需要在嵌套循环中执行它并不重要,但我认为这是唯一的方法。谢谢你的帮助。

Dou*_*ris 11

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
Run Code Online (Sandbox Code Playgroud)

  • 你可以只做 `if diff ... &gt;/dev/null` 没有括号和变量。 (3认同)

Ign*_*ams 10

在 bash 中:

diff --brief <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)