给定两个文件,我想编写一个 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")