高速ヘッド/テールコマンドの問題

高速ヘッド/テールコマンドの問題

これは私が使用しているファイルの出力です。

aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj

私は以下を使用すると、tail -n 5 filename次のように表示されることを知っています。

fffff
ggggg
hhhhh
iiiii
jjjjj

headこのようにコマンドを使用してどのように同じように表示できますか?精密ワイヤーか。

head -n 10 filename | tail -n 5 filenameうまくいきますが、私が探しているものとは重複しています。

ベストアンサー1

注文

head -n 10 filename | tail -n 5 filename

無意味。出力は から直接読み取ったので読み取れheadません。したがって、結果は今の結果とまったく同じです。tailtailfilename

tail -n 5 filename

このheadユーティリティはトップファイルの内容(またはGNUの場合は、ファイルのhead末尾の特定の行数を除くファイルのすべての行)。headファイルデータの尾を取得するためにこのユーティリティを使用したくありません。これを行うには、tail示されているとおりに使用します。

他のソリューションは基本ソリューションよりも複雑ですtail -n 5

たとえば、

tac filename | head -n 5 | tac

GNU coreutilsがすでにインストールされているとしますtac。どちらもリモートPOSIX準拠のシェル環境を持つすべてのシステムにインストールされ、headLinuxシステムとGNU coreutilsがインストールされている他のシステムでのみ見つけることができます。tailtac

あるいは、単に使用したくない場合は、自分で実装することもできますtailawktail

$ awk -vn=5 '{ lines[i++ % n] = $0 } END { for (j = 0; j < n; ++j) print lines[(i+j)%n] }' filename
fffff
ggggg
hhhhh
iiiii
jjjjj

おすすめ記事