2020/08/02

head、tailを組み合わせて行を表示させる

linuxコマンドラインでテキストファイルの指定した行(XX)から指定した行数(YY)を表示させるには、他にもやり方はありますが、ここでは次のようにします。

$ cat ZZZ.txt | tail -n +XX | head -n YY

例えばlevels.txtファイルの30行目から始まる15行を表示するには、次のようにします。

$ cat levels.txt | tail -n + 30 | head -n 15

以下、headとtailの動作を少し詳しく説明します。

headはファイルの先頭から表示させる機能を持ちます。
オプションの-nに続けて指定する数値が、先頭から数えた行数を意味し、先頭からその行数を表示させることができます。
数値には+(プラス文字)を付けて指定することもできますが、動作は変わりません。
しかし数値に-(マイナス文字)をつけると末尾までのその行数を除いて表示という意味に変わります。

例示すると次のとおりです。

$ seq 10 | head -n 3   # 「head -n +3」、「head -3」でも同様
1
2
3

$ seq 10 | head -n -3
1
2
3
4
5
6
7

オプションの-nを使わずに-(マイナス文字)に直接数値を続けてオプション指定することもできます。
その場合、先頭からその行数を表示させることができます。
オプションの-nを使わずに、マイナス文字を付けなかった場合と、+(プラス文字)から直接数値を続けた場合には、エラーか予期しない動作になります。

要約すると次のとおりです。

-n -[数値] -n [数値] -n +[数値]
head 先頭から表示、末尾までのその行数を除く 先頭からその行数を表示

-[数値] [数値] +[数値]
head 先頭からその行数を表示 エラーか予期しない動作

tailはファイルの末尾まで表示させる機能を持ちます。
オプションの-nに続けて指定する数値が、その行数を表示するという意味であり、その行数だけを末尾まで表示させることができます。
数値には-(マイナス文字)を付けて指定することもできますが、動作は変わりません。
しかし数値に+(プラス文字)をつけると先頭から数えたその行から表示という意味に変わります。

例示すると次のとおりです。

$ seq 10 | tail -n 3 # 「tail -n -3」、「tail -3」でも同様
8
9
10

$ seq 10 | tail -n +3 # 「tail +3」でも同様
3
4
5
6
7
8
9
10

オプションの-nを使わずに-(マイナス文字)に直接数値を続けてオプション指定することもできます。
その場合、末尾までをその行数だけ表示させる意味になります。
また+(プラス文字)に直接数値を続けてオプション指定した場合、先頭から数えたその行から末尾までを表示できます。
オプションの-nを使わずに、マイナス文字もプラス文字も付けなかった場合、エラーか予期しない動作になります。

要約すると次のとおりです。

-n -[数値] -n [数値] -n +[数値]
tail 末尾までをその行数だけ表示 先頭から数えたその行から末尾までを表示

-[数値] [数値] +[数値]
tail 末尾までをその行数だけ表示 エラーか予期しない動作 先頭から数えたその行から末尾までを表示

headもtailもオプションとして-nの代わりに-cを用いることができ、その場合は行単位の操作ではなくバイト単位の操作が可能です。

またtailはオプションに-fを使うことができ、この場合はログファイルなど、次々に更新されていくファイルを、リアルタイムに更新して表示させることができます。

<環境>
・chromebookのLinux(ベータ版)環境
Chromebook 311 / C721-N14N / Acer
Chrome OS バージョン: 84.0.4147.94(Official Build) (64 ビット)
chromebookのLinux(ベータ版)環境 / Debian 9: 9.12 (Stretch)
・crouton環境
Chromebook 11 / C740-F34N / Acer
Chrome OS バージョン: 84.0.4147.94(Official Build) (64 ビット)
crouton環境 / Ubuntu 18.04.4 LTS (Bionic Beaver)

0 件のコメント:

コメントを投稿