Czy istnieje wygodny sposób na identyfikację zduplikowanych lub prawie zduplikowanych bloków tekstu w pliku?
Chcę tego użyć do identyfikacji duplikacji kodu. Wygląda na to, że istnieją specjalne programy z tą funkcją, ale nie chcę się w to angażować.
Mam nadzieję, że istnieje narzędzie podobne do diff, które może wykonać coś w rodzaju różnicowania „w obrębie pliku”. Jeszcze lepiej byłoby w ramach jednego pliku vimdiff.
text-processing
diff
vimdiff
Prakseolityczny
źródło
źródło
vimdiff
nie zrobisz?Odpowiedzi:
Jeśli wykonanie porównania linia po linii jest dopuszczalne, następujące informacje powiedzą, które wiersze są duplikowane w pliku
text
i ile razy każdy z nich się pojawia:Jako przykład,
Za pomocą zwykłych narzędzi uniksowych można to rozszerzyć, zakładając, że format testu wejściowego nie jest zbyt skomplikowany, do porównań akapit po akapicie lub zdania po zdaniu.
Znajdowanie powtarzających się akapitów
Załóżmy, że nasz plik
text
zawiera:Następujące polecenie wskazuje, które akapity pojawiają się więcej niż jeden raz:
Służy to
awk
do dzielenia tekstu na akapity (oznaczone pustymi liniami), konwertuje nowe wiersze na spacje, a następnie przekazuje dane wyjściowe, jeden wiersz na akapit, w celu sortowania i unikania w celu zliczania zduplikowanych akapitów.Powyższe zostało przetestowane z GNU
awk
. W przypadku innychawk
metoda definiowania pustych linii jako granic akapitu (zapisu) może się różnić.źródło