ファイルの指定行以降を表示したい

テキストファイルの先頭N行をスキップして、N行目以降を表示したい。

例えば以下のような10行のファイルがある。

1
2
3
4
5
6
7
8
9
10

このファイルから5行目以降を表示したい。

5
6
7
8
9
10

tail -n +N

tailコマンドに-n +Nオプションをつけると、N行目以降の内容を表示する。

$ tail -n +5 numbers.txt
5
6
7
8
9
10

-n +5オプションで5行目以降(5行目から最後まで)を表示している。

末尾を表示する通常のtail

通常のtailコマンドは末尾から指定した行数を表示する。

$ tail -n 5 numbers.txt
6
7
8
9
10

-n 5オプション(または-5)で末尾5行を表示している。

+記号の有無の違い

-nオプションでの+記号の有無で動作が変わる。

  • -n N(または-n -N): 末尾N行を表示
  • -n +N: N行目以降を表示
# 末尾3行を表示
$ tail -n 3 numbers.txt
8
9
10

# 3行目以降を表示
$ tail -n +3 numbers.txt
3
4
5
6
7
8
9
10

CSVファイルのヘッダーをスキップ

CSVファイルの1行目のヘッダーをスキップしてデータ行のみを処理する場合に便利である。

Name,Age,City
Alice,25,Tokyo
Bob,30,Osaka
Charlie,28,Kyoto
# ヘッダー行をスキップして2行目以降を表示
$ tail -n +2 data.csv
Alice,25,Tokyo
Bob,30,Osaka
Charlie,28,Kyoto

ヘッダーをスキップした後、パイプで他のコマンドに渡してデータ処理を行える。

# ヘッダーをスキップしてカンマ区切りでカラムを取得
$ tail -n +2 data.csv | cut -d',' -f2
25
30
28

head との組み合わせ

headtailを組み合わせると、ファイルの特定の範囲の行を抽出できる。

# 3行目から5行目を表示(3行目以降を取得してその最初の3行を表示)
$ tail -n +3 numbers.txt | head -n 3
3
4
5

tail -n +3で3行目以降を取得し、head -n 3でその最初の3行を表示している。

標準入力からの使用

パイプでコマンドの出力結果から指定行以降を表示できる。

$ seq 1 20 | tail -n +11
11
12
13
14
15
16
17
18
19
20

seq 1 20で1から20までの数値を生成し、tail -n +11で11行目以降を表示している。