gpt4 book ai didi

linux - 合并 awk 脚本的问题

转载 作者:IT王子 更新时间:2023-10-29 01:26:20 26 4
gpt4 key购买 nike

我正在尝试使用 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 部分替换为 [remove (first duplicate count or 2nd duplicate count depending on which is larger].

编辑:如果重要的话,我也在使用 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

关于linux - 合并 awk 脚本的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com