私は問題を解決していましたが、私は次のようなものを見つけました。データファイルファイル拡張子がありません。コマンドはfile
それがあることを示していますdata file (application/octet-stream)
。hd
国民総生産。最後の行に。したがって、このファイルを逆にすると、次のような結果が得られます。.PNG私はフォーマットファイルを見つけるためにどこでも検索しましたが、バイナリファイルの内容を元に戻す方法を説明する解決策が見つかりませんでした。
答え1
xxd
(でvim
)とtac
(GNU coreutilsでは、tail -r
一部のシステムでも)を使用してください。
< file.gnp xxd -p -c1 | tac | xxd -p -r > file.png
答え2
In zsh
(内部的にバイナリデータを処理できる唯一のシェルです(考慮したくない場合)。ksh93のbase64エンコーディング)):
zmodload zsh/mapfile
(LC_ALL=C; printf %s ${(s::Oa)mapfile[file.gnp]} > file.png)
LC_ALL=C
:文字はバイトです。$mapfile[file.gnp]
file.gnp
:文書内容s::
:文字列をバイトコンポーネントに分割します。Oa
:O
リバースソート配列添字a
答え3
パールの使用:
perl -0777pe '$_=reverse $_' [input_file]
性能試験:
dd if=/dev/urandom of=/tmp/a bs=1M count=1
LC_ALL=C tac -rs $'.\\|\n' /tmp/a > /tmp/r
time perl -0777pe '$_=reverse $_' /tmp/a | diff -q - /tmp/r
time xxd -p -c1 /tmp/a | tac | xxd -p -r | diff -q - /tmp/r
time perl -0777 -F -ape '$_=reverse@F' /tmp/a | diff -q - /tmp/r
time LC_ALL=C tac -rs $'.\\|\n' /tmp/a | diff -q - /tmp/r
結果:
- ローカルテスト:私のソリューションは最も速く、
perl -0777 -F
最も遅いです。 - テスト対象オンラインでお試しください!:私の解決策は最も速く、
xxd
最も遅いです。
注:すべてのソリューションの実行時間はdiff
出力と同じでなければなりません。
答え4
私は以下を試しました:
tac -rs '.' input.gnp > output.png
アイデアは、「tac」がすべての文字を区切り文字として使用するように強制することです。バイナリで試してみましたが、うまくいくようです。確認していただきありがとうございます。
最大の利点は、ファイルをメモリにロードしないことです。