删除重复的行,但保留没有字符串的行

时间:2014-10-28 00:11:00

标签: csv awk duplicates

我一直在寻找一些如何删除我的csv文件的重复项。我从一个包含多个字段的文件开始,但后来我意识到我可以使用一个带有2个字段的文件,然后使用第一个字段合并文件。这是我想要做的:我有这个文件CSV file,你可以看到有多个基因有多个描述。他们中的一些有两个描述,一个是假设的蛋白质"和其他是"别的"。在那种情况下,我想删除一个假想的蛋白质#34;并保持"其他东西"。但是,如果有多个描述,我可以保留第一个描述。我一直用awk尝试它。如果我可以使用awk它会很棒。

输入示例:

AAEL018330  hypothetical protein
AAEL018330  tropomyosin, putative
AAEL018331  hypothetical protein
AAEL018332  
AAEL018333  hypothetical protein
AAEL018333  colmedin

想要输出:

AAEL018330  tropomyosin, putative
AAEL018331  hypothetical protein
AAEL018332  
AAEL018333  colmedin

谢谢。

1 个答案:

答案 0 :(得分:1)

在一般(未分类)的情况下,如果你想保留一行一行的最后一个条目,你可以使用类似的东西:

awk '{seen[$1]=$0} END {for (i in seen) {print seen[i]}}' file

虽然不能保证排序顺序。

在这种情况下,对于排序的输入,这样的东西应该起作用:

awk 'f!=$1 && line{print line} {f=$1; line=$0} END {print line}' file