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

How to change double value at specific offset in the file from shell script?

我有 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

-或-

perl -i -0777pe'substr($_, 4*8, 8, pack("d", 0.008))' file.bin

其中:

  • -i - 直接在文件中进行更改,
  • -0777 - 将行分隔符更改为 undef,允许通过一次性将所有行提供给 Perl 来吞噬文件,
  • -p - 在你的命令周围放置一个打印循环,
  • -e '...' - 允许您从参数中提供程序