删除重复的条目使用Bash脚本

我想从文本文件中删除重复的条目,例如:

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脚本?

期望的输出

 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 

你可以sort然后uniq

 $ sort -u input.txt 

或者使用awk

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

它从文件中删除重复的连续行(模拟“uniq”)。
保留一组重复行中的第一行,删除其余行。

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

Perl类似于@ kev的awk解决scheme:

 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 

这可能适合你:

 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