Czy istnieje polecenie uniksowe, które może sprawdzić, czy jakieś dwa wiersze w pliku są takie same?
Na przykład rozważ plik sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Widzimy to zdanie
This is sentence X
jest powtorzone.
Czy jest jakieś polecenie, które może to szybko wykryć, aby być może mógłbym wykonać to w ten sposób -
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
CodeBlue
źródło
źródło
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
byłby nieco bardziej wydajny i pozwoliłby uniknąć potencjalnycharg list too long
problemów.Nie dokładnie to, czego chcesz, ale możesz spróbować połączyć
sort
iuniq -c -d
:2
oto liczba znalezionych duplikatów dla linii, zman uniq
:źródło
JEŚLI zawartość pliku mieści się w pamięci
awk
jest do tego dobra. Standardowy jeden wiersz w pliku comp.lang.awk (nie mogę przeszukiwać instancji z tego komputera, ale co miesiąc jest kilka), aby wykryć, że występuje duplikacja,awk 'n[$0]++'
zlicza wystąpienie każdej wartości wiersza i drukuje każde wystąpienie inny niż pierwszy, ponieważ domyślną akcją jestprint $0
.Aby wyświetlić wszystkie wystąpienia, w tym pierwsze, w twoim formacie, ale być może w mieszanej kolejności, gdy zduplikowana jest więcej niż jedna wartość, staje się nieco bardziej wybredna:
Pokazane w wielu wierszach dla przejrzystości, zwykle biegasz razem w prawdziwym użyciu. Jeśli robisz to często, możesz umieścić
awk
skrypt w pliku za pomocąawk -f
, lub oczywiście całą rzecz w skrypcie powłoki. Jak najprostsze,awk
można to zrobić bardzo podobnieperl -n[a]
.źródło