1. テーマ
「以下の 3つのテキストファイル(CSVファイル)をこの順番で結合する」を実現する Linux コマンドを紹介します。
foo1.csv
Title, Author, Price
AAAAA, BBBBB, 10000
CCCCC, DDDDD, 20000
foo2.csv
Title, Author, Price
EEEEE, FFFFF, 30000
GGGGG, HHHHH, 40000
foo3.csv
Title, Author, Price
IIIII, JJJJJ, 50000
KKKKK, LLLLL, 60000
※ 3ファイルともに、最後の行で改行しています。
2つ目以降のファイルのラベル行をどう除外するか?がポイントです。
2. コマンド紹介
いろいろとやり方はあると思うのですが、本記事では以下のコマンドを紹介します。
{ cat foo1.csv; sed '1d' foo2.csv; sed '1d' foo3.csv; } > foo.csv
foo.csv というファイルを生成しています。
シェルスクリプトファイルに記述するとこんな感じです。改行やインデントにより、少し見やすくしてあります。
#! /usr/bin/sh
{ \
cat foo1.csv; \
sed '1d' foo2.csv; \
sed '1d' foo3.csv; \
} > foo.csv
基本的には各ファイルを出力した結果を、そのまま foo.csv ファイルにしているだけですが、ラベル行が必要ない 2つ目, 3つ目のファイルは、sed
コマンドで1行目を削除しています。
生成されたファイルの内容は以下になります。
Title, Author, Price
AAAAA, BBBBB, 10000
CCCCC, DDDDD, 20000
EEEEE, FFFFF, 30000
GGGGG, HHHHH, 40000
IIIII, JJJJJ, 50000
KKKKK, LLLLL, 60000
3. おわりに
Linux のコマンドを使いこなすと、テキスト処理に強くなります。