【发布时间】:2015-07-13 11:05:42
【问题描述】:
我正在尝试使用 awk 来解析制表符分隔的表——第一列中有几个重复的条目,我需要删除表中其他 4 列的总和较小的重复行。我可以轻松删除第一行或第二行,并对列求和,但我无法将两者结合起来。出于我的目的,不会有超过 2 个重复项。
示例文件:http://pastebin.com/u2GBnm2D
在这种情况下,所需的输出是删除行:
lmo0330 1 1 0 1
lmo0506 7 21 2 10
并在列中保持其他两行具有相同的基因 id。最终解析的文件如下所示:http://pastebin.com/WgDkm5ui
这是我尝试过的(这没有任何作用。但第一部分删除了第二个重复项,第二部分对计数求和):
awk 'BEGIN {!a[$1]++} {for(i=1;i<=NF;i++) t+=$i; print t; t=0}'
我尝试在此问题的最佳答案中修改脚本的第二部分:Removing lines containing a unique first field with awk?
awk 'FNR==NR{a[$1]++;next}(a[$1] > 1)' ./infile ./infile
但不幸的是,我并不真正了解发生了什么足以使其正常工作。谁能帮我吗?我想我需要将a[$1] > 1 部分替换为[删除(第一次重复计数或第二次重复计数,具体取决于哪个更大)。
编辑:如果重要的话,我也在使用 GNU Awk 3.1.7。
【问题讨论】:
-
你的问题没问题,但很难理解,你到底想要什么。
-
我添加了一个链接,指向解析后输出的样子,这有助于澄清问题吗?
-
这是一个非常旧的 gawk 版本,你应该更新它,因为你缺少很多非常有用的功能。