sed -n '10000000,10000020p' filename
次のようにして速度を上げることができます。
sed -n '10000000,10000020p; 10000021q' filename
これらのコマンドでは、このオプション-n
によりsed
「パターンスペースの自動印刷が抑制されます」。p
コマンド「プリント[s]は、現在のパターンスペース」とq
「すぐにそれ以上の入力を処理せずに[S] sedスクリプトを終了...」コマンド引用符からあるsed
man
ページ。
ところで、あなたのコマンド
tail -n 10000000 filename | head 10
ファイルの最後から1000万行目から開始しますが、「中間」コマンドは最初から1000万行目から始まるように見えます。
head -n 10000010 filename | tail 10
問題は、可変長の行を持つソートされていないファイルの場合、すべてのプロセスが改行をカウントするファイルを通過する必要があることです。それをショートカットする方法はありません。
ただし、ファイルが並べ替えられている場合(タイムスタンプ付きのログファイルなど)、または固定長の行がある場合は、バイト位置に基づいてファイルをシークできます。ログファイルの例では、ここでの Pythonスクリプト*のように、ある範囲の時間でバイナリ検索を実行できます。固定レコード長ファイルの場合、それは本当に簡単です。linelength * linecount
ファイルに文字を探すだけです。
*私はそのスクリプトにさらに別の更新を投稿する意味を持ち続けています。たぶん、私はこれらの日のうちの1つに近づきます。