如何让awk仅对有效数值求和,遇到NA时保留NA而非输出0?
解决方法
你可以通过在awk中添加条件判断来实现这个需求,核心逻辑是只要任意一列是NA,就输出NA;否则计算两列的有效数值之和。
下面是可以直接使用的awk命令:
BEGIN {print "sum_column"} # 输出自定义表头 { if ($1 == "NA" || $2 == "NA") { print "NA" } else { print $1 + $2 } }
逻辑拆解
BEGIN {print "sum_column"}:在处理数据前先输出表头,对应你需要的<Column header>,你可以把sum_column改成自己想要的表头名称。- 条件判断
$1 == "NA" || $2 == "NA":检查第一列或第二列是否为NA,只要其中一列是NA,就直接输出NA,保留原标识。 - 非NA场景执行
$1 + $2:awk会自动处理整数和浮点数的加法运算,像你示例里的1.76+0.92会准确得到2.68。
测试验证
假设你的输入数据是:
1 1 1 1 1 1 1 1 1.76 0.92 1.76 0.92 NA NA 1 1
用上述awk命令处理后,输出结果完全符合你的预期:
sum_column 2 2 2 2 2.68 2.68 NA 2
内容的提问来源于stack exchange,提问作者bayesianpower
相关产品推荐
相关产品推荐

