試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ファイルの先頭や末尾を取り出すコマンド(headとtail)について(テスト用データの準備とheadコマンド)

ここではファイルの先頭部分を取り出すheadコマンドと末尾部分を取り出すtailコマンドについてを扱う。

  1. テスト用データの準備
  2. head
    1. 末尾の指定行/バイト数を除いて出力する

テスト用データの準備

各行に番号のみを含んだテキストファイルをseqコマンド(関連記事)で作っておくことにする。

$ seq 10 > num.txt

全体は下のようになる。

$ cat num.txt
1
2
3
4
5
6
7
8
9
10

同様にしてファイルをもう1つ作成しておくことにする。

$ seq 11 20 > num2.txt
$ cat num2.txt
11
12
13
14
15
16
17
18
19
20

head

引数の場所にあるファイルを開いてオプションで指定した行数(-n [行数])あるいはバイト数(-c [バイト数])だけを先頭から取り出して(標準出力へ)出力する。バイト数指定の場合は後ろに「k」「m」を付けてそれぞれKiB単位とMiB単位で指定することもできる。

(行数指定)
$ head -n 2 num.txt
1
2

(バイト数指定・下の例では3つの文字と2つの改行で5バイト)
$ head -c 5 num.txt
1
2
3(ここで改行されずに終了)

(2014/6/11)いずれのオプションも付けない場合は先頭の10行が出力される(-n 10と同様の動作)。
複数のファイルが引数で指定されたときには各ファイルの内容の前にどのファイルかが示されるが、-qオプションを付けることで表示しないようにもできる。

(複数のファイル・ファイル名表示あり)
$ head -n 2 num.txt num2.txt
==> num.txt <==
1
2

==> num2.txt <==
11
12

(複数のファイル・ファイル名表示なし)
$ head -q -n 2 num.txt num2.txt
1
2
11
12

また、引数を付けない場合は標準入力が用いられ、他のコマンドからの出力をパイプを用いて処理することもできる。

(ファイルを標準入力から開く)
$ head -n 3 < num.txt 
1
2
3

(他のコマンドからの出力を処理する)
$ seq 100 | head -n 5
1
2
3
4
5

末尾の指定行/バイト数を除いて出力する
(2014/6/20)-nオプションで行数指定を行う際に「-」付きで行数を指定すると、末尾の[指定した数]行を除いた部分を出力する。

$ head -n -7 num.txt
1
2
3

この指定形式はバイト数指定(-cオプション)でも使用できる(末尾の指定バイト数を除いたものが得られる)。

使用したバージョン: