2

我一直在对一个 3 字段 x 2 行文件进行一些数学运算,如下所示:

3216.01   2724.81   1708.25
1762.48   617.436   1650.79

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

只是为了完成:我计划取 1 美元(第 1 行)并减去 1 美元(第 2 行),然后对其他列进行平方和相同操作,最后将这个值相加。

4

2 回答 2

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 循环结构

编辑

正如 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!

于 2013-08-20T10:16:46.560 回答
3

我通常会把它放在一些临时变量中

awk 'NR>1 {print $1-a} {a=$1}' inputfile
于 2013-08-20T10:06:11.787 回答