我有一个包含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.
答案 0 :(得分:0)
因为你没有提供完整的输入/输出示例,我想这是一个普遍的问题。所以这就是答案:
sort -t',' -k5,5n -k13,13nr file.csv|awk -F, '!a[$5]++'
尽管awk可以单独完成,但在sort
的帮助下,代码可能会更容易。以上单行做什么:
这里有一点测试,在这个例子中,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