我正在尝试使用awkparsing制表符分隔的表 – 第一列中有几个重复项,我需要删除表中其他4列的总和较小的重复行。 我可以很容易地删除第一行或第二行,然后总结列,但是我无法将两者结合起来。 为我的目的,永远不会有超过2个重复。
示例文件: http : //pastebin.com/u2GBnm2D
在这种情况下,所需的输出将是删除行:
lmo0330 1 1 0 1 lmo0506 7 21 2 10
并保留在列中具有相同基因ID的其他两行。 最终的parsing文件如下所示: http : //pastebin.com/WgDkm5ui
这是我所尝试过的(这个没有做任何事情,但是第一部分删除了第二个副本,第二部分总结了计数):
awk 'BEGIN {!a[$1]++} {for(i=1;i<=NF;i++) t+=$i; print t; t=0}'
我尝试在这个问题的最佳答案中修改脚本的第二部分: 使用awk删除包含唯一第一个字段的行?
awk 'FNR==NR{a[$1]++;next}(a[$1] > 1)' ./infile ./infile
但不幸的是,我不太了解发生了什么事情,以使其正常工作。 谁能帮我吗? 我想我需要用[删除(第一个重复计数或第二个重复计数,取决于哪个更大)]来replacea[$1] > 1
部分。
编辑:我也使用GNU Awk 3.1.7,如果这件事。
你可以使用这个awk
命令:
awk 'NR == 1 { print; next } { s = $2+$3+$4+$5 } s >= sum[$1] { sum[$1] = s; if (!($1 in rows)) a[++n] = $1; rows[$1] = $0 } END { for(i=1; i<=n; i++) print rows[a[i]] }' file | column -t
输出:
gene SRR034450.out.rpkm_0 SRR034451.out.rpkm_0 SRR034452.out.rpkm_0 SRR034453.out.rpkm_0 lmo0001 160 323 533 293 lmo0002 135 317 504 306 lmo0003 1 4 5 3 lmo0004 35 59 58 48 lmo0005 113 218 257 187 lmo0006 279 519 653 539 lmo0007 563 1053 1165 1069 lmo0008 34 84 203 107 lmo0009 13 45 90 49 lmo0010 57 210 237 169 lmo0011 65 224 247 179 lmo0012 65 226 250 215 lmo0013 342 500 738 682 lmo0014 662 1032 1283 1311 lmo0015 321 413 631 637 lmo0016 175 253 273 325 lmo0017 3 6 6 6 lmo0018 33 38 46 45 lmo0019 13 1 39 1 lmo0020 3 12 28 15 lmo0021 3 4 14 12 lmo0022 2 3 5 1 lmo0023 2 0 3 2 lmo0024 1 0 2 6 lmo0330 1 1 1 3 lmo0506 151 232 60 204