Text-Processing
辨識文件中重複的文本塊
有沒有一種方便的方法來辨識文件中重複或接近重複的文本塊?
我想用它來辨識程式碼重複。看起來有具有此功能的專業程序,但我不希望參與其中。
我希望有一個類似於 diff 的工具可以做一種“文件內”的差異。更好的是在單個文件 vimdiff 中。
如果逐行進行比較是可以接受的,那麼以下內容將告訴文件中哪些行重複
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
將文本分成段落(由空白行劃定),將換行符轉換為空格,然後將輸出(每段一行)傳遞給 sort 和 uniq 以計算重複的段落。以上是用 GNU 測試的
awk
。對於其他awk
的,將空行定義為段落(記錄)邊界的方法可能會有所不同。