使用 awk 根据另一列是否为空来对列的值求和

使用 awk 根据另一列是否为空来对列的值求和

我最初是在这个问题和答案的基础上建立的(使用 awk 根据另一列的值对一列的值求和)但显然我必须提出一个新问题。

我有一个包含多列的 tsv 文件。当第二列为空时,我想对第 3 列的相应值求和。当第 2 列不为空时(它的内容因行而异),我想对第 3 栏。示例:

ColumnA ColumnB ColumnC
One              10
Little  STH      15
Red     XIV      55
Car              20

输出将只是: 30 和 70 有可能吗?我们能否区分:空时计数,非空时计数?

非常感谢你的帮助,本

编辑:我制作了另一张表格来替换我之前作为图像放置的表格: 在此输入图像描述

答案1

您可以使用按要满足的条件索引的 awk 数组,然后打印数组中的所有值,例如:

awk 'BEGIN {FS = "\t"}; NR>1 {sum[$2!=""] += $3}; END{for (i in sum) print i, sum[i]}' test.tsv 

sum数组将包含两个值,sum[false]或者sum[0]不满足条件的值的总和,sum[true]或者sum[1]满足条件的值的总和。

输出,使用您的示例:

0 30
1 70

答案2

就像是

awk 'BEGIN { FS=OFS="\t" }
     NR > 1 && $2 == "" { empty += $3 }
     NR > 1 && $2 != "" { full += $3 }
     END { print "Empty", empty; print "Text", full }' input.tsv

相关内容