ファイルの1行目だけスキップして出力するコマンド

コマンドラインCSVファイルを出力し、パイプで渡して処理を行うことが多いのだが、その際ヘッダ行が邪魔になることが多い。例えば以下のようなCSVファイルの場合、データ集計をする際にヘッダ行は必要ない。

$ cat filename.csv 
会員番号,職業,スコア
10001,事務,10
10002,経理,8
10003,営業,4
10004,人事,7

今まではgrep等の検索結果を工夫して1行目が自然と落ちるように頑張ってなんとかしたことも多いが、検索に不要なデータはなるべく処理の前段階で落としておきたい。
良い方法がないかと思っていたら、意外にもtailコマンドに良い指定方法があった。

$ tail -n +2 filename.csv
10001,事務,10
10002,経理,8
10003,営業,4
10004,人事,7

tailコマンドでは -n オプションで出力行数を指定できるが、 +2 のようにすると2行目以降のみを出力できる。この数字は任意の指定ができ、例えば +11 とすると11行目以降となる。このオプションを使うようになってから、パイプの数を減らすことができた例も多く、非常に重宝している。

ちなみにheadコマンドでも似たような指定方法がある。ただしこちらの場合、 -2 のように指定すると最後の2行目を除いた状態で出力される。また、このオプションはGNU版のみで使えるようだ。

$ head -n -2 filename.csv 
会員番号,職業,スコア
10001,事務,10
10002,経理,8