如何在awk中对文件的行进行计算

如何在awk中对文件的行进行计算,awk,Awk,我有一个文件,看起来像这样: 88.3055 45.1482 37.7202 37.4035 53.777 我要做的是将第一行的值分离出来,然后除以其他行的值(这是一个加速计算)。我考虑将第一行存储在一个变量中(使用NR),然后在其他行上迭代以从分割中获得值。期望输出为: 1,9559 2,3410 2,3608 1,6420 更新 对不起,Ed,我弄错了,需要的小数点是 我对Ed的答案做了一些小改动,以便awk自己打印88.3055的除法,并将其输出到文件speedup.dat: awk

我有一个文件,看起来像这样:

88.3055
45.1482
37.7202
37.4035
53.777
我要做的是将第一行的值分离出来,然后除以其他行的值(这是一个加速计算)。我考虑将第一行存储在一个变量中(使用NR),然后在其他行上迭代以从分割中获得值。期望输出为:

1,9559
2,3410
2,3608
1,6420
更新

对不起,Ed,我弄错了,需要的小数点是

我对Ed的答案做了一些小改动,以便awk自己打印88.3055的除法,并将其输出到文件speedup.dat:

awk 'NR==1{n=$0} {print n/$0}' tavg.dat > speedup.dat
是否可以在不使用中间文件的情况下,将speedup.dat的内容与另一个awk命令的结果合并到一个单独的awk命令中

第一命令:

awk 'BEGIN { FS = \"[ \\t]*=[ \\t]*\" } /Total processes/ { if (! CP) CP = $2 } END {print CP}' cg.B.".n.".log ".(n == 1 ? ">" : ">>")." processes.dat
第一个命令输出:

1
2
4
8
16
粘贴两个文件:

paste processes.dat speedup.dat > prsp.dat
这将提供现在所需的输出:

1   1
2   1.9559
4   2.34107
8   2.36089
16  1.64207
通常,您只需使用正确的区域设置,将
作为小数点,但您的输入使用
,而输出使用
,因此我认为这不是一个选项

awk '{if(n=="") n=$1; else print n/$1}' inputFile
awk '{if(n=="") n=$1; else print n/$1}' inputFile