awk – 获得每行平均值
发布时间:2020-12-14 01:12:19 所属栏目:Linux 来源:网络整理
导读:我有这种格式的大型数据集 HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 我想计算每一行的平均值,从第5列开始直到行结束,并忽略字符串NA.然后将平均值附加到每行的末尾. 输出看起来像这样: HF TLLL A T
我有这种格式的大型数据集
HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 我想计算每一行的平均值,从第5列开始直到行结束,并忽略字符串NA.然后将平均值附加到每行的末尾. 输出看起来像这样: HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 0.775 HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 0.620 我一直得到这样的总和,但无法弄清楚如何跟踪求和的整数数,以便计算平均值. awk '{x=0;for(i=5;i<=NF;i++)x=x+$i;print $0,x}' 解决方法$cat file HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 HF TLLM A T NA NA NA NA NA NA NA $awk '{sum=cnt=0; for (i=5;i<=NF;i++) if ($i != "NA") { sum+=$i; cnt++ } print $0,(cnt ? sum/cnt : "NA") }' file HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 0.77525 HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 0.6204 HF TLLM A T NA NA NA NA NA NA NA NA 三元表达式避免了输入行3上的除零误差,其中每个数据字段都是“NA”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |