ファイルの最後の行からn行目を取得します。

ファイルの最後の行からn行目を取得します。

行が多いファイルがあり、最後のn行(特に下から95行)が必要です。これを続行するにはどうすればよいですか? 1つの方法はテールを使用することですが、最後から最後の95まですべてを印刷するので、95番目だけが必要です。

答え1

指摘したように、tailファイルから最後の95行を取得するために使用できます。これらのうち最初のものだけが必要で、そのために呼び出されるユーティリティがありますhead。だから

tail -95 file | head -1

使用することはtailおそらくあなたができる最善の方法でしょう。

別のアプローチは、ラインをライン配列として読み込み、ファイルの終わりに達したときにn-95ラインを印刷することです。実際にすべての行を保存する必要はないので、最後に読み取った95行を保存するために95要素の循環バッファを持つことができます。

答え2

@icarusの返信この問題は解決できますが、他のオプションを追加するだけです。

tac file | sed -n 95p

tacファイルが逆方向に印刷され、sed -n 95p95行が印刷されます。ファイルが逆に印刷されるため、下から95行目が表示されます。

修正する

@icarusがコメントで述べたように:

欠点は、95行ではなくファイル全体がパイプされることです。 95行目を印刷した後、sedに明示的に終了するように指示すると、これらの欠点は排除されます。

したがって、95行を印刷した後に終了する更新されたコマンドは次のようになります。

tac file | sed -n '95{p; q}'

関連情報