Rhythm & Biology

Engineering, Science, et al.

ファイルの先頭を指定行数ぶん読み飛ばす

ファイルの先頭から指定行数ぶん取り除きたいことがよくある。
例えば固定行数のヘッダがついており、それを除去したい場合。

tailコマンドを使えば簡単にできるが、他にどんな方法があるか色々試してみた。

8行のファイルを用意し、最初の3行を読み飛ばす。

$ cat sample.txt
1
2
3
4
5
6
7
8

tailを使う方法

「4行目から表示」という意味で+4とする(+3と間違えないように)。

$ tail -n +4 sample.txt
4
5
6
7
8

sedを使う方法

「1〜3行目を削除」とする。

$ sed 1,3d sample.txt
4
5
6
7
8

awkを使う方法

「行番号が3より大きければ表示」とする。

$ awk 'NR>3{print}' sample.txt
4
5
6
7
8

もっと簡単に書ける(printを省略)。

$ awk 'NR>3' sample.txt
4
5
6
7
8

perlを使う方法

awkと同じ考え方。

$ perl -ne '$.>3 && print' sample.txt
4
5
6
7
8

commを使う方法

headで先頭3行を取り出して元ファイルと比べ、共通部分を取り除く。
わざわざこんな書き方をするのは狂気でしかない。

$ head -n 3 sample.txt | comm -2 -3 sample.txt -
4
5
6
7
8

結論

tailで十分。
ただ、sed,awk,perlを使えば途中の数行読み飛ばすとかできるので汎用性は高い。