如何从 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 '...'
- 允许您从参数中提供程序
我有 5 个双精度值存储在二进制文件中,方法如下:
perl -e "print pack('d5', (0.001, 0.002, 0.003, 0.004, 0.005))" > file.bin
我想将现有文件中的第 5 个值从 0.005
更改为 0.008
。
我知道我可以 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 '...'
- 允许您从参数中提供程序