回答:
スイッチを使用して、最後の4GB程度を出力するためにtailを使用できると思います-c
-c、--bytes = [+] NUM
は最後のNUMバイトを出力します。または、-c + NUMを使用して、各ファイルのバイトNUMから出力します
おそらく、開始したいオフセットに設定してingすることで、ddで何かをすることができます。bs=1
skip
dd if=file bs=1024k skip=12g | grep something
コメントのいくつかがそれを求めたので、私はちょうどこれを投稿しています。
最終的に使用したのは(15 GBファイル)です。非常に高速に動作し、時間を大幅に節約できました。
tail -f -c 14G file | grep something
同じファイルで非常に初歩的なベンチマークも行いました。私はテストしました:
grep xxxファイル
//永遠にかかりました(> 5分)dd if = file bs = 1 skip = 14G | grep xxx
//非常に高速<1秒テール-c 14g | grep xxx
//かなり高速<2秒
これtail
は少し短いです。
注意:使用されるサフィックスg
とG
コマンドごとに異なります(Ubuntu 15.10)
これはタイトルの質問には答えませんが、あなたがやりたいことをします。tacを使用してファイルを反転し、grepを使用して文字列を見つけます。ファイル内で文字列が1回だけ、または既知の回数だけ出現する場合は、既知の出現回数が見つかるまで実行します。そうすれば、ファイルのどこにあるかについての仮定が正しくない場合でも、それが見つかります。制限したい場合は、headを使用してそれを行うことができます。headコマンドは、tacとgrepの間を行き来します。
したがって、コマンドは次のようになります。
tac < logfile | grep myString
tac
がないので、ありがとう!
LC_ALL=C grep
スピードアップするかもしれません。