Удалите повторяющиеся записи с помощью Bash script

Я хочу удалить повторяющиеся записи из текстового файла, например:

kavitha= Tue Feb    20 14:00 19 IST 2012  (duplicate entry) 
sree=Tue Jan  20 14:05 19 IST 2012  
divya = Tue Jan  20 14:20 19 IST 2012  
anusha=Tue Jan 20 14:45 19 IST 2012 
kavitha= Tue Feb    20 14:00 19 IST 2012 (duplicate entry) 

Можно ли удалить дубликаты записей с помощью Bash script?

Желаемый вывод

kavitha= Tue Feb    20 14:00 19 IST 2012 
sree=Tue Jan  20 14:05 19 IST 2012  
divya = Tue Jan  20 14:20 19 IST 2012  
anusha=Tue Jan 20 14:45 19 IST 2012

Ответ 1

Вы можете sort затем uniq:

$ sort -u input.txt

Или используйте awk:

$ awk '!a[$0]++' input.txt

Ответ 2

Удаляет повторяющиеся последовательные строки из файла (эмулирует "uniq" ).
Первая строка в наборе повторяющихся строк сохраняется, остальные удаляются.

sed '$!N; /^\(.*\)\n\1$/!P; D'

Ответ 3

Perl one-liner похож на решение @kev awk:

perl -ne 'print if ! $a{$_}++' input

Этот вариант удаляет конечные пробелы перед сравнением:

perl -lne 's/\s*$//; print if ! $a{$_}++' input

Этот вариант редактирует файл на месте:

perl -i -ne 'print if ! $a{$_}++' input

Этот вариант редактирует файл на месте и создает резервную копию input.bak

perl -i.bak -ne 'print if ! $a{$_}++' input

Ответ 4

Это может сработать для вас:

cat -n file.txt |
sort -u -k2,7 |
sort -n |
sed 's/.*\t/    /;s/\([0-9]\{4\}\).*/\1/'

или это:

 awk '{line=substr($0,1,match($0,/[0-9][0-9][0-9][0-9]/)+3);sub(/^/,"    ",line);if(!dup[line]++)print line}' file.txt