我最初是在这个问题和答案的基础上建立的(使用 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