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:
sort text | uniq -c | grep -vE '^\s*1 '
Jako przykład,
$ cat text
alpha
beta
alpha
gamma
alpha
beta
$ sort text | uniq -c | grep -vE '^\s*1 '
3 alpha
2 beta
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:
This is a paragraph.
This is another
paragraph
This is
a paragraph.
Last sentence.
Następujące polecenie wskazuje, które akapity pojawiają się więcej niż jeden raz:
$ awk -v RS="" '{gsub(/\n/," "); print}' text | sort | uniq -c | grep -vE '^\s*1 '
2 This is a paragraph.
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 innych awk
metoda definiowania pustych linii jako granic akapitu (zapisu) może się różnić.
vimdiff
nie zrobisz?