我是一个初学者,试图用awk解决bash脚本问题,我有这个当前的问题,下面有示例数据:
label1 0 0 0 0 0 1
label2 0 0 0 0 0 1
label3 0.2 0.2 0.9 0 0 0
label4 0 0 0.8 0.1 0 0
label5 0.1 0.1 0.1 0.15 0.1 0.1
label6 0.1 0.15 0.1 0.1 0.1 0.1
第1列是行的标题,第2列到第7列是数值。
我目前正在尝试使用awk(对任何其他建议开放)为每个新行输出一个包含4列的新文件:
label1 0 1 0.166666667
label2 0 1 0.166666667
label3 0.9 0 0.121666667
label4 0.8 0.1 0.103
label5 0.1 0.15 0.000416667
label6 0.15 0.1 0.000416667
其中:
第1列是输入
第1列
第2列是来自输入
的第2列到第4列的最大值
第3列是来自输入
的第5列到第7列的最大值
第4列是第2列到第7列的方差
非常感谢您的建议和帮助(和时间)!
KS
答案 0 :(得分:0)
awk
救援!
awk 'function max(x,y) {return x>y?x:y}
function mean(is,ie) {s=0; for(i=is;i<=ie;i++) s+=$i; return s/(ie-is+1)}
function var(is,ie,m) {v=0; for(i=is;i<=ie;i++) v+=($i-m)^2; return v/(ie-is)}
{print $1, max(max($2,$3),$4), max(max($5,$6),$7), var(2,7,mean(2,7))}' file |
column -t
label1 0 1 0.166667
label2 0 1 0.166667
label3 0.9 0 0.121667
label4 0.8 0.1 0.103
label5 0.1 0.15 0.000416667
label6 0.15 0.1 0.000416667
备注强>
计算“样本差异”
您可能希望使用
格式化数字printf
对于大型脚本,您可能希望在函数等中隔离变量名称。