根据第5列删除重复的行,并在第13列中保留最高值

时间:2015-09-22 10:01:44

标签: excel awk

我有一个包含20列和9000行的电子表格(.csv)。我想删除第5列中具有相同ID的行,因此每个ID号(唯一ID)最终只会有一个条目(或行)。如果第5列中有2个或更多行具有相同的ID,我希望保留第13列中得分最高的行。同时,我希望每行保留所有20列(所有信息)。重复ID和较低分数的行并不重要,所以我想删除它们。

我正在尝试用awk和珍珠,但不知怎的,我只能设法做到一半。如果我需要提供更多信息,请告诉我。谢谢!

INPUT(分隔符=','):

geneID, Score, annotation, etc.
ENSG0123, 532.0, intergenic, etc.
ENSG0123, 689.4, 3-UTR, etc.
ENSG0123, 234.0, 5-UTR, etc.
ENSG0399, 567.8, 5-UTR, etc.

输出:

geneID, Score, annotation, etc.
ENSG0123, 689.4, 3-UTR, etc.
ENSG0399, 567.8, 5-UTR, etc.

1 个答案:

答案 0 :(得分:0)

因为你没有提供完整的输入/输出示例,我想这是一个普遍的问题。所以这就是答案:

 sort -t',' -k5,5n -k13,13nr file.csv|awk -F, '!a[$5]++'

尽管awk可以单独完成,但在sort的帮助下,代码可能会更容易。以上单行做什么:

  • 按col5和col13(数字,降序)
  • 对文件进行排序
  • 将排序后的结果传递给awk以删除重复项,基于col5。

这里有一点测试,在这个例子中,col1是你的col5,而col3是你的col13:

kent$  cat f
1,2,3
2,8,7
1,2,4
1,4,5
2,2,8
1,3,6
2,2,9
1,2,10
LsyHP 12:38:04 /tmp/test
kent$  sort -t',' -k1,1n -k3,3nr f|awk -F, '!a[$1]++'
1,2,10
2,2,9