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

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

你可以排序然后uniq:

$ sort -u input.txt

或者使用awk:

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

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

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

这可能对你有用:

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

Perl一行程序类似于@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