Perl 如何从shell脚本更改文件中特定偏移量处的双精度值?
我在二进制文件中存储了5个双值,如下所示: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是否有能力更改它,或者我必须使用其他实用程序
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
是否有能力更改它,或者我必须使用其他实用程序(如xxd
),或者我应该使用perl
perl -i -0777pe'my @n = unpack("d5", $_); $n[4] = 0.008; $_ = pack("d5", @n);' file.bin
-或-
其中:
-直接在文件中进行更改-i
-将行分隔符更改为-0777
,允许通过一次将所有行馈送到Perl来清除文件unde
-在命令周围放置一个打印循环-p
-允许您从参数中提供程序-e'…'
perl -i -0777pe'substr($_, 4*8, 8, pack("d", 0.008))' file.bin