Unix bash: 文件内容的差异
Unix bash: Differences on file content
想知道有没有什么方法或者Unix命令可以不考虑顺序就知道两个文件的内容是否相同
也就是说下面两个文件内容必须被认为是相同的:
AAAA
BBBB
BBBB
AAAA
提前致谢!
备注:我知道我可以使用 diff 或 md5sum 但据我了解他们不考虑我的情况有兴趣。
编辑:因为我需要它来查找在一组数千个文件中是否至少有两个具有相同内容的文件,所以我 post 我使用 @ 编写的 bash 脚本anishsane 给出的答案:
#!/bin/bash
for entry in file-*.smt2
do
for entry1 in file-*.smt2
do
if [ -f "$entry" ] && [ -f "$entry1" ] && [ "$entry" != "$entry1" ]; then
file1=`sort $entry | md5sum`
file2=`sort $entry1 | md5sum`
if [ "$file1" == "$file2" ]
then
echo "Files have the same content"
echo "$entry $entry1"
echo "$file1"
echo "$file2"
exit -2
else
echo "Files $entry and $entry1 have NOT the same content"
fi
fi
done
done
如果您的文件没有排序,您可以使用 sort
命令对它们进行排序。请注意,此命令不会在线对文件进行排序,而是在 stdout
.
上打印文件的排序版本
bash
有一个叫做 process substitution
的特征。进程的标准输出(或标准输入)在 /dev/fd/xxx
中用作文件句柄并传递给进程。 (下面示例中的 diff
。)
结合这两个,你得到这个解决方案,它使用普通 diff
:
diff <(sort file1) <(sort file2)
想知道有没有什么方法或者Unix命令可以不考虑顺序就知道两个文件的内容是否相同
也就是说下面两个文件内容必须被认为是相同的:
AAAA
BBBB
BBBB
AAAA
提前致谢!
备注:我知道我可以使用 diff 或 md5sum 但据我了解他们不考虑我的情况有兴趣。
编辑:因为我需要它来查找在一组数千个文件中是否至少有两个具有相同内容的文件,所以我 post 我使用 @ 编写的 bash 脚本anishsane 给出的答案:
#!/bin/bash
for entry in file-*.smt2
do
for entry1 in file-*.smt2
do
if [ -f "$entry" ] && [ -f "$entry1" ] && [ "$entry" != "$entry1" ]; then
file1=`sort $entry | md5sum`
file2=`sort $entry1 | md5sum`
if [ "$file1" == "$file2" ]
then
echo "Files have the same content"
echo "$entry $entry1"
echo "$file1"
echo "$file2"
exit -2
else
echo "Files $entry and $entry1 have NOT the same content"
fi
fi
done
done
如果您的文件没有排序,您可以使用 sort
命令对它们进行排序。请注意,此命令不会在线对文件进行排序,而是在 stdout
.
bash
有一个叫做 process substitution
的特征。进程的标准输出(或标准输入)在 /dev/fd/xxx
中用作文件句柄并传递给进程。 (下面示例中的 diff
。)
结合这两个,你得到这个解决方案,它使用普通 diff
:
diff <(sort file1) <(sort file2)