使用awk在单独的行上的多个字段上的数学

时间:2013-08-20 10:03:29

标签: linux unix awk

我一直在3字段x 2行文件上做一些数学运算:

3216.01   2724.81   1708.25
1762.48   617.436   1650.79

我的问题是如何引用第一行的第一个字段并在同一计算中,参考第二行中的第一个字段?

只是为了完成:我打算花1美元(第1行)并减去$ 1(第2行),然后对其他列进行平方并做同样的操作,最后总结这个值。

2 个答案:

答案 0 :(得分:7)

此行符合您的要求:

awk 'NR==1{for(i=1;i<=NF;i++)a[i]=$i}
NR==2{for(i=1;i<=NF;i++)s+=(a[i]-$i)^2; printf "sum: %.3f",s}' file

结果:

sum: 6557076.288

注意

  • 这应该适用于动态列数,但恰好是两行
  • 输出格式为%.3f,如果您愿意,可以更改
  • 代码可以缩短,因为有两个类似的for-loop结构

修改

根据EdMorton的建议,上述代码可以写成:

awk 'NR==1{split($0,a)}
    NR==2{for(i=1;i<=NF;i++)s+=(a[i]-$i)^2; printf "sum: %.3f\n",s}' file

非常好的建议,我没想到分裂......谢谢Ed!

答案 1 :(得分:3)

我通常会在一些临时变量中记录它

awk 'NR>1 {print $1-a} {a=$1}' inputfile