有没有可以查找类似文档的应用程序?

有没有可以查找类似文档的应用程序?

是否有任何好的软件可以找到相似的多个文件组,或者一个文件包含另一个文件的一部分?

我有一个目录,里面有很多文件混合在一起。这些文件中,都是不同版本的文件,而且文件名也很乱。

答案1

如何使用 diff 比较两个文件,使用“wc -l”计算差异文本的行数,然后计算两个比较文件中的实际行数。如果差异行明显小于文件的实际行,那么可以肯定地说这些文件更相似。至少这是一个开始。

这是你要做的事情的想法。笔记这是假设您正在处理非二进制文件

首先,您想要获取每个文件的行数:

$ cat <file1> | wc -l
24
$ cat <file2> | wc -l
18
$ cat <file3> | wc -l
25
$ cat <file4> | wc -l
4

然后,浏览目录,将文件与“diff”进行比较并计算行差异:

$ diff <file1> <file2> | wc -l 
47
$ diff -ib <file1> <file3>  | wc -l
12
$ diff -ib <file1> <file4>  | wc -l
34

这就是基本的想法。

下面的脚本将为您执行此操作(在当前目录上操作),并在差异小于任一文件中的行数时回显。您可以将其修改为更加谨慎,仅查找比任一文件的行号少 10+ 的 diff 行计数的匹配项。

for i in `ls`; do 
  for f in `ls`; do 
    if [ $i != $f ]; then 
      F_LINES=`cat $f | wc -l`; 
      I_LINES=`cat $i | wc -l`; 
      DIFF=`diff -ib $i $f | wc -l`;
      if [ $I_LINES -ge $DIFF ]; then 
        if [ $F_LINES -ge $DIFF ]; then 
          echo "SIMILAR: $i [lines: $I_LINES] - $f [lines: $F_LINES] - # lines different: $DIFF";
        fi;
      fi;
    fi;
  done; 
done

正如我所说,这个脚本没有什么特别的,可以大大简化,但我是即时执行的。它会输出类似这样的内容(给出上面的测试文件示例)。

SIMILAR: <file1> [lines: 24] - <file3> [lines: 25] - # lines different: 12
SIMILAR: <file3> [lines: 25] - <file1> [lines: 24] - # lines different: 12

相关内容