2016-05-08 1 views
1

私は次のように、バイナリファイルに保存された5重の値持っている:シェルスクリプトからファイル内の特定のオフセットでdouble値を変更するにはどうすればよいですか?

perl -e "print pack('d5', (0.001, 0.002, 0.003, 0.004, 0.005))" > file.bin 

を、私は既存のファイルに0.0080.005から5番目の値を変更したいと思います。

私はのように、GNU odを使用してread the doubleができることを知っています:

$ od -F -An -j32 -N8 file.bin | xargs 
0.005 

が、どのように私はシェルで簡単な方法で、これらの値のいずれかを変更することができますか?

GNU odはそれを変更する機能がありますか、他のユーティリティ(xxdなど)を使用していますか、perlを使用する必要がありますか?

答えて

1
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 - 読ますることができ、undefに行区切りを変更する -
  • -0777は、直接ファイルに変更を加えますすべての行をPerlに一度に送ることでファイルします。
  • -p - 、あなたのコマンドの周りに印刷ループを配置
  • -e '...' - あなたは、引数
からプログラムを提供することができます
関連する問題