gpt4 book ai didi

linux - 计算列中负数的总和?

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:13 25 4
gpt4 key购买 nike

您好,我有一个这样的文件:

probeset_id submitted_id chr snp_pos alleleA alleleB 562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_210  
AX-75448119 Chr1_41908741 1 41908741 T C 0 -1 0 -1 0 0 0 0 0 -1
AX-75448118 Chr1_41908545 1 41908545 T A 2 -1 2 2 2 -1 -1 2 2 0
AX-75448118 Chr1_41908545 1 41908545 T A 1 2 2 2 2 -1 2 2 2 0

我想计算从第 7 列到末尾的负数 的总和(在实际文件中我有 102 列):

我使用 awk 来计算正态总和(而且效果很好):

awk 'NR>1 {x+=$8}END{print x}' test.txt

但我想做的是计算仅负数的总和。如果没有负数,我希望有 0。所以我想找到一个为每一列运行的 awk 命令,我得到一个输出 0 或一个负数,例如 -1 -2 -3 等等上。

这就是我的尝试:

awk '/^-/ {n++;x+=$9} END {print x}' test.txt
awk '/^-/ {x+=$9} END {print x}' test.txt
awk 'NR>1' test.txt | awk '/^-/ {x+=$9} END {print x}'

但我一无所获!没有错误,现在回答!我也在尝试获得理想的输出格式:

562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_210 
0 -2 0 -1 0 -2 -1 0 0 -1

我尝试了一些我认为基本错误的事情:

awk 'NR>1 {for ($i=7;i<=NF;$i++) if (x ~ /^-/) x+=$i }END{print x}' test.txt

结果:我的电脑换了!

awk 'NR>1 {for (i=7;i<=NF;i++) if ($i ~ /^-/) x+=$i }END{print x}' test.txt

结果:我得到了一个不相关的答案(文件中负数的总和)!

但这并不重要。我只想让 awk 命令计算每一列中的负数之和!

最佳答案

您必须更加努力,您发布的最后一个示例非常接近。这将分别对列求和(如果这是您想要的):

awk 'NR == 1 {cols = NF-7; for (i=7;i<=NF;i++) {header[i-7]=$i; x[i-7]=0;} } 
NR>1 {for (i=7;i<=NF;i++) if ($i ~ /^-/) x[i-7]+=$i }
END{for(i=0; i<=cols; i++) print header[i], x[i]}' <file

关于linux - 计算列中负数的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209773/

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