如果后续行具有相同的初始当前行,如何删除行

时间:2014-04-11 07:27:44

标签: sed

如果我有如下列表:

cat mytext
name first_Aelement
loc second_Aelement
cell third_Alement
name first_Belement
loc second_Belement
loc second_Belement_1
cell third_Blement
name first_Celement
loc second_Celement
cell third_Clement

我怎样才能过滤与前一行相同标题的行。预期产出是:

cat mytext
name first_Aelement
loc second_Aelement
cell third_Alement
name first_Belement
loc second_Belement
cell third_Blement
name first_Celement
loc second_Celement
cell third_Clement

2 个答案:

答案 0 :(得分:2)

awk应该:

awk 'NR>1 && $0~a {f=1} !f; {a=$1;f=0}' file
name first_Aelement
loc second_Aelement
cell third_Alement
name first_Belement
loc second_Belement
cell third_Blement
name first_Celement
loc second_Celement
cell third_Clement

测试当前行是否包含前一行,如果是,则不要打印它 跳过第一行,因为它与前一行不同。

答案 1 :(得分:0)

sed -n '1h;1!H;x;s/\(\n\)\(.*\)\1\2.*/\1\2/;x;${x;p;}' YourFile

希望你的文件不是数百万行,因为它保存在缓冲存储器中: - )

如果像前一个(缓冲区的最后一个)一样开始查看每一行,并且在这种情况下不要保留它(替换为空)。最后,打印结果