Bash脚本删除重复的行,只有它复制前一行

时间:2014-06-11 15:18:27

标签: bash awk

我的文件包含大量数据,其中一些是重复的。我想删除重复的行,如果他们互相追随。

例如,如果输入文件包含:

string1
string2
string2
string3
string1
string4
string4
string4

我希望输出文件读取:

string1
string2
string3
string1
string4

我对bash脚本相当新。我认为awk是要走的路,但我有点难过。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:2)

命令uniq正是这样做的。

它经常与sort结合使用,因此副本将相邻。

答案 1 :(得分:1)

您可以使用awk

awk '$0==b{next}{b=$0;print}' a.txt
string1
string2
string3
string1
string4

我使用变量b代表缓冲区。如果当前行已经在缓冲区中,则不会打印该行。否则它会将行放到缓冲区中打印出来。

答案 2 :(得分:1)

这个awk也应该有效:

awk '$1!=p{print} {p=$1}' file
string1
string2
string3
string1
string4

或者你可以进一步缩短它:

awk '$1!=p; {p=$1}' file