CSVを加工したい、列を足したい、簡単な計算をしたい。
こういう場面で、ついPythonやExcelを開きたくなりますが、bashだけで済むケースもかなり多いです。
bash道では「最初から重い道具を持ち出さない」ことを大切にします。
この記事では、CSV加工でbashがどこまで使えるのかを整理します。
bashでCSV加工をするメリット
bashでやるメリットは派手さではなく、軽さです。
- 環境構築がいらない
- SSH先でもすぐ使える
- 作業ログとして残しやすい
- ワンライナーで再現できる
特に「一回きりの加工」や「確認用の加工」ではbashが最強です。
基本はawk
CSV加工の主役はawkです。
awkは「行を読む → 列を扱う → 計算する」が自然に書けます。
例: data.csv
x
12
18
30
xを6.1で割った値を右に追加する場合。
awk 'BEGIN{OFS=","} NR==1{print $0,"y"; next} {print $1, $1/6.1}' data.csv
出力
x,y
12,1.96721
18,2.95082
30,4.91803
OFSで区切り文字を指定できるのがポイントです。
列を増やす
既存のCSVに計算列を足すのはawkが得意です。
例:
x,y
10,2
20,4
x/y を z として追加する。
awk 'BEGIN{OFS=","} NR==1{print $0,"z"; next} {print $0, $1/$2}' data.csv
bash的には「元の行をそのまま出して、最後に足す」という考え方をします。
条件分岐もできる
if文での判定もawkで完結します。
例: yが1ならxをzに、それ以外はyをzにする。
awk 'BEGIN{OFS=","} NR==1{print $0,"z"; next} {if($2==1){z=$1}else{z=$2}; print $0, z}' data.csv
小さな条件分岐なら、Pythonを書くより読みやすいことも多いです。
bashでやらないほうがいい境界
何でもbashでやればいい、というわけではありません。
bashをやめる目安
- CSVの構造が頻繁に変わる
- 文字コードや引用符が複雑
- 数千行ではなく数十万行を超える
- 処理をサービスとして再利用したい
このあたりからはPythonや専用ツールに任せたほうが安全です。
bash道的な使い分け
bash道ではこう考えます。
- まずbashで試す
- bashで見えるならbashで終わらせる
- 無理を感じたら、迷わず他の言語へ行く
bashは「最終解」ではなく「最速の一歩」です。
おわりに
CSV加工はbashでも十分戦えます。
awkを一本覚えるだけで、日常のデータ処理はかなり楽になります。
「Pythonを書く前にawkを疑う」
これを合言葉に、bash道を進んでいきましょう。
