awk:从所有行中减去第一行并乘以因子

awk:从所有行中减去第一行并乘以因子

我有一个包含一些数字的文件

$ cat file.dat
0.092593
0.048631
0.027957
0.030699
0.026250
0.038156
0.011823
0.013284
0.024529
0.022498
0.013217
0.007105
0.018916
0.014079

我想从所有其他数字中减去第一个数字,然后将差值乘以 627.509。预期产出

$ cat newfile.dat
0.000000
-27.586551
-40.559672
-38.839042
-41.630830
-34.159707
-50.683902
-49.767111
-42.710773
-43.985243
-49.809154
-53.644489
-46.232981
-49.268242

假设我想用 awk 执行此操作,我是否必须创建一个包含 awk 语句之前的第一个数字的变量,例如

factor=$(head -1 myfile.dat)

或者我可以用 awk 完全做到这一点吗?

答案1

怎么样

awk 'NR == 1 {DELTA = $0} {$0 = ($0 - DELTA) * FAC; print}' FAC=627.509 file

答案2

这似乎有效:

$ awk -v c=627.509 'NR==1 { b=$1 } { printf( "%0.6f\n", ( $1-b ) * c ) }' file.dat
0.000000
-27.586551
-40.559672
-38.839042
-41.630830
-34.159707
-50.683902
-49.767111
-42.710773
-43.985243
-49.809154
-53.644489
-46.232981
-49.268242

相关内容