GNU/Linux >> Linux の 問題 >  >> Linux

Bashで、任意のバイトカウントオフセットからファイルの読み取りを開始することは可能ですか?

8 GBのログ(テキスト)のどこかにある日付を見つけたいのですが。

完全なシーケンシャル読み取りをいくらかバイパスして、最初にファイル(サイズ)のバイナリ分割を実行するか、ファイルシステムの iノードをナビゲートすることはできますか? (私は非常に 少し)、各分割点から読み始め、日付を含む行のテキスト検索を開始する場所から適切なオフセットが見つかるまで?

テール の最後の行の読み取りは通常の順次読み取りを使用しないので、この機能がbashで利用できるのか、それともPythonまたはC / C ++を使用する必要があるのか​​疑問に思います…しかし、私は特にに興味があります。 bash オプション..

承認された回答:

for (( block = 0; block < 16; block += 1 ))
do 
    echo $block; 
    dd if=INPUTFILE skip=$((block*512))MB bs=64 count=1 status=noxfer 2> /dev/null | 
        head -n 1
done

これは、一時分割ファイルを作成せず、実行ごとにブロック* 512MBのデータをスキップし、その位置から64バイトを読み取り、出力をその64バイトの最初の行に制限します。

64を必要と思われるものに調整することをお勧めします。


Linux
  1. 「.bashrc」と同等のファイルがすべてのシェルによって読み取られますか?

  2. フォルダから最も古いファイルを削除するためのBashスクリプト?

  3. ファイルが開いているVim/tmuxを見つけることは可能ですか?

  1. Bashで文字列を16進数として読み取る方法は?

  2. Bashを使用してファイルから行を読み取る:対その間?

  3. ファイルからGrepパターンを読み取る?

  1. Cコードから現在使用されているファイル記述子の数を取得する

  2. Bash履歴ファイルから特定の行を削除します

  3. ファイルからバイト範囲を取得する Linux コマンド