识别文件中重复的文本块

识别文件中重复的文本块

有没有一种方便的方法来识别文件中重复或接近重复的文本块?

我想用它来识别代码重复。似乎有具有此功能的专业程序,但我不希望参与其中。

我希望有一个类似于 diff 的工具可以进行某种“文件内”比较。更好的是在单个文件内使用 vimdiff。

答案1

如果可以接受逐行比较,则以下内容将告诉文件中哪些行重复text以及每行出现多少次:

sort text | uniq -c | grep -vE '^\s*1 '

举个例子,

$ cat text
alpha
beta
alpha
gamma
alpha
beta
$ sort text | uniq -c | grep -vE '^\s*1 '
      3 alpha
      2 beta

使用常用的 unix 工具,假设输入测试格式不太复杂,可以将其扩展为逐段或逐句比较。

查找重复的段落

假设我们的文件text包含:

This is a paragraph.

This is another
paragraph

This is
a paragraph.

Last sentence.

以下命令标识显示哪些段落出现多次:

$ awk -v RS=""  '{gsub(/\n/," "); print}' text | sort | uniq -c | grep -vE '^\s*1 '
      2 This is a paragraph.

这用于awk将文本分成段落(用空行划分),将换行符转换为空格,然后将输出(每段落一行)传递到排序和 uniq 以计算重复的段落。

以上内容已使用 GNU 进行了测试awk。对于其他awk的,将空行定义为段落(记录)边界的方法可能不同。

相关内容