Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題87

問題87 odの出力の復元

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

16進数に直してxxd -p -r で復元するのだろうなとは考えついたが具体的にワンライナーを書くところまではいけなかった。od で出力したものはバイトオーダーがちょっと厄介なのを完全に忘れていた。

解答例は

cat oct.txt | awk '{$1="";print}' | xargs -n 1 | sed '1iobase=16;ibase=8;' | bc | awk '{printf "%4s\n",$0}' | tr ' ' 0 | sed -r 's/(..)(..)/\2\1/' | xxd -p -r

となる。まずオフセットを削除して2バイトごとに1つの行へ出力する。(もともとのデータは8進数で6桁、つまり2進数では16桁(2byte)であらわされるデータになっている。)そのあと16進数へ変換して0埋めをして、バイトオーダーを入れ替えたらxxdで復元する。