Unixでファイルのn行目を見つけるために "tail -n 1"を使用するのはなぜですか?

Unixでファイルのn行目を見つけるために "tail -n 1"を使用するのはなぜですか?

私は人々が通常head -n | tail -n 1シェルを使ってファイルのn行目を見つけることを知っていました。

head -7たとえば、ファイルの7行を検索するように求められますかtail

答え1

head -7

または現代的で標準的なものと同等のもの:

head -n 7

入力の最初の7行(または少ない場合は最大7行)を印刷します。

パイプtail -n 1を介して最後の行を取得するため、行数が少ない場合は、7行目または最後の行のみを取得します。

7のみをインポートするには(または行数が少ない場合は何もインポートしません)、次のように使用できます。

tail -n +7 | head -n 1

値や行番号が大きいほど、パイプを通過するデータが少ないため、効率が高くなります。

sed次のコマンドを使用してこれを実行することもできます。

sed '7!d;q'

sedこれは特殊化されheadておらずtail、これよりも長い行を処理する必要はないため、効率が悪くなる可能性がありますが、実装によっては長すぎる行では機能しない可能性がありsedます。headtailLINE_MAX

コメントで提案されているように読み取りを中断するのではなく、7行をsed -n 7p印刷した後も入力全体を読みます。これはあまり効率的ではありませんが、コマンド出力に適用するときのように7行を出力した後にコマンドを終了したくない場合は、これがより良い可能性があります。sed '7!d'head

関連情報