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

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

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

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

答え2

私の考えでは、これがあなたが望むものです。

foo@bar~$猫ファイル
ああああ
bbbb
cccc
ディディディディ
に に に
パフパフ
クッキー
ははは
三十三

head以前と同じ行を印刷するために使用しようとしていますtail

foo@bar~$ tail -n 5ファイル
パフパフ
クッキー
ははは
三十三

解決策

foo@bar~$ sort -r ファイル|ヘッダー-5|種類
パフパフ
クッキー
ははは
三十三

答え3

この実装では、ファイルの最後の5行だけを表示するheadためにWithoutを使用します。tail

head -n -0 filename | sed 1,$(echo "$(wc -l filename | awk '{ print $1 }')-5" | bc -l)d

head -n -0 filename - ファイルのすべての行を表示します。

~からman head:

-n, --lines=[-]N "-"で始まる最初の10行ではなく、最初のN行を印刷し、各ファイルの最後のN行を除くすべての行を印刷します。

$(echo "$(wc -l filename | awk '{ print $1 }')-5" | bc -l) -- ファイルの総行数から 5 を引いた値に基づいて削除する行数を計算します。

sed 1、(NUMBER_OF_LINES_TO_DELETE)d - 前の計算に基づいて最後の5行を除くすべての行を削除します。

答え4

head1位を占めるためだNファイルの行。tail最後のものを手に入れようNファイルの行。もっと一般的なものが必要な場合は確認してください。このスレッド

関連情報