0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ヘッダーがあるファイル同士をマージしたい

Last updated at Posted at 2025-06-29

背景・目的

  • 同じタイプのファイルを一つのファイルにマージしたかった
  • しかし両方ともにカラムがあったので単純なリダイレクトができなかった
  • パッとワンライナーでやりたかった

コマンド

$ awk 'FNR!=1 || NR==1 { print }' input1.csv input2.csv

ざっくり解説

  • FNR!=1 || NR==1の結果を判定し、真の場合に後続のprintを実行する
  • FNRはファイルごとの行数を表す
  • NRは読み込んだデータ全体の行数を表す
  • つまり、FNR!=1で各ファイルの1行目(ヘッダー)は除外される。しかし、or条件でNR==1一番最初の行(1つ目のヘッダー)だけ許容されているのでヘッダー行を最初に一度だけ出力することができる

補足

  • 以下のやり方もできるよう。条件を追加するなどの拡張しやすいのは以下。
# 判定で真の行はnextでスキップしている
# それ以外は1で出力している
$ awk 'FNR==1 && NR!=1 { next } 1' input1.csv input2.csv
  • マージするだけでなくデータをソートしたい場合は以下のようにコマンドループを使用すればいけるよう
{
  head -n 1 input1.csv
  tail -n +2 -q input1.csv input2.csv input3.csv | sort
} > merged.csv
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?