Perl 如何从shell脚本更改文件中特定偏移量处的双精度值?

Perl 如何从shell脚本更改文件中特定偏移量处的双精度值?,perl,shell,command-line,floating-point,binary-data,Perl,Shell,Command Line,Floating Point,Binary Data,我在二进制文件中存储了5个双值,如下所示: perl -e "print pack('d5', (0.001, 0.002, 0.003, 0.004, 0.005))" > file.bin 我想在已经存在的文件中将第5个值从0.005更改为0.008 我知道我可以通过使用GNUod,比如: $ od -F -An -j32 -N8 file.bin | xargs 0.005 但是如何在shell中以简单的方式修改其中一个值呢 GNUod是否有能力更改它,或者我必须使用其他实用程序

我在二进制文件中存储了5个双值,如下所示:

perl -e "print pack('d5', (0.001, 0.002, 0.003, 0.004, 0.005))" > file.bin
我想在已经存在的文件中将第5个值从
0.005
更改为
0.008

我知道我可以通过使用GNU
od
,比如:

$ od -F -An -j32 -N8 file.bin | xargs
0.005
但是如何在shell中以简单的方式修改其中一个值呢

GNU
od
是否有能力更改它,或者我必须使用其他实用程序(如
xxd
),或者我应该使用perl

perl -i -0777pe'my @n = unpack("d5", $_); $n[4] = 0.008; $_ = pack("d5", @n);' file.bin
-或-

其中:

  • -i
    -直接在文件中进行更改
  • -0777
    -将行分隔符更改为
    unde
    ,允许通过一次将所有行馈送到Perl来清除文件
  • -p
    -在命令周围放置一个打印循环
  • -e'…'
    -允许您从参数中提供程序
perl -i -0777pe'substr($_, 4*8, 8, pack("d", 0.008))' file.bin