Pra*_*tic 11 diff text-processing vimdiff
是否有一种方便的方法来识别文件中重复或接近重复的文本块?
我想用它来识别代码重复。看起来有具有此功能的专业程序,但我不打算参与其中。
我希望有一个类似于 diff 的工具可以做一种“文件内”差异。更好的是在单个文件中使用 vimdiff。
Joh*_*024 14
如果逐行进行比较是可以接受的,那么以下内容将说明文件中哪些行重复text以及每行出现了多少次:
sort text | uniq -c | grep -vE '^\s*1 '
Run Code Online (Sandbox Code Playgroud)
举个例子,
$ cat text
alpha
beta
alpha
gamma
alpha
beta
$ sort text | uniq -c | grep -vE '^\s*1 '
3 alpha
2 beta
Run Code Online (Sandbox Code Playgroud)
使用通常的 unix 工具,假设输入测试格式不是太复杂,这可以扩展到逐段或逐句比较。
假设我们的文件text包含:
This is a paragraph.
This is another
paragraph
This is
a paragraph.
Last sentence.
Run Code Online (Sandbox Code Playgroud)
以下命令标识显示哪些段落出现多次:
$ awk -v RS="" '{gsub(/\n/," "); print}' text | sort | uniq -c | grep -vE '^\s*1 '
2 This is a paragraph.
Run Code Online (Sandbox Code Playgroud)
这用于awk将文本分成段落(由空行划定),将换行符转换为空格,然后将输出(每个段落一行)传递给 sort 和 uniq 以计算重复段落。
以上是用 GNU 测试的awk。对于 other awk,将空行定义为段落(记录)边界的方法可能会有所不同。