komekichix’s diary

日々の仕事、生活でぶち当たった問題の解決策を書き残しています。あなたのお役に立てれば幸いです。

カンマ区切りCSVを瞬時に縦並びに変換する方法

はじめに

CSVデータから目的のカラム値を確認するときどうやってますか?
エクセルのデータ区切りを使う方法が最も一般的かと思います。
が、1行だけであれば、テキストエディタで確認できるお手軽な方法があるので紹介します。
また、sedコマンドでもやってみました。ちょっと面倒ですが、シェル化するなどして使い道があるかもしれません。

1.テキストエディタでやってみる

下記のサンプルデータを使用してやってみます。

ID,名前,年齢,性別,給与,部署,役職,経験年数,学歴,住所,電話番号,メールアドレス,雇用日,パフォーマンススコア,福利厚生
1,アリス,28,女性,55000,営業,マネージャー,6,学士,東京都渋谷区1-2-3,03-1234-5678,alice@email.com,2020-03-15,優秀,健康保険、歯科保険
2,ボブ,35,男性,72000,エンジニアリング,ソフトウェアエンジニア,10,修士,東京都千代田区4-5-6,03-9876-5432,bob@email.com,2012-08-20,高評価,401(k)、有給休暇
3,チャーリー,22,男性,42000,マーケティング,コーディネーター,2,専門学士,神奈川県横浜市7-8-9,045-345-6789,charlie@email.com,2023-01-10,平均,有給休暇
4,ディアナ,31,女性,62000,人事,リクルーター,8,学士,東京都中央区10-11-12,03-2345-6789,diana@email.com,2015-05-02,高評価,フレックスタイム制度
5,エヴァ,24,女性,48000,財務,アナリスト,4,学士,神奈川県川崎市13-14-15,044-456-7890,eva@email.com,2019-11-18,平均,退職金制度

このサンプルデータはMicrosoftのAIであるCopilotさんに作ってもらいました。便利な時代です。

①目的の行を抜き出す

テキストエディタは置換に正規表現が使えるものであれば何を使っても構いません。
CSVファイルをテキストエディタで開きます。
目的の行を新しいテキストに貼り付けます。

目的の行のみを新しいテキストに貼り付ける
②カンマを改行コードに置換する

テキストエディタの置換機能から以下の条件を設定します。
置換前 ,
置換後 \r\n
正規表現」チェックをオンにするのを忘れずに。
「すべて置換」をします。
\はエスケープ文字です。バックスラッシュか¥マークを使います。

置換条件を入力して全置換する
③出来上がり

エディタ左端の行数がカラム位置を表します。

縦並びになる

2.sedコマンドでやってみる

需要があるかわかりませんがsedコマンドを駆使しても可能です。

①目的の行を抜き出す

 nオプションの後に行番号を指定すると目的の行を抽出できます。
 指定行の後ろにpをつけるのを忘れずに。
 例:3行目を抜き出す場合
 sed -n 3p data.csv

$ sed -n 3p data.csv 
2,ボブ,35,男性,72000,エンジニアリング,ソフトウェアエンジニア,10,修士,東京都千代田区4-5-6,03-9876-5432,bob@email.com,2012-08-20,高評価,401(k)、有給休暇
$ 
②カンマを改行コードに置換する

 sコマンドでカンマを改行コードに置換します。
 gは全置換オプションです。つけないと1個目のカンマしか置換されません。
 sed -n 3p data.csv | sed s/,/\\n/g
 
 \はエスケープ文字です。バックスラッシュか¥マークを使います。

$ sed -n 3p data.csv | sed s/,/\\n/g
2
ボブ
35
男性
72000
エンジニアリング
ソフトウェアエンジニア
10
修士
東京都千代田区4-5-6
03-9876-5432
bob@email.com
2012-08-20
高評価
401(k)、有給休暇
$
③行番号を追加する

 =コマンドで行番号を追加します。
 sed -n 3p data.csv | sed s/,/\\n/g | sed =

$ sed -n 3p data.csv | sed s/,/\\n/g | sed =
1
2
2
ボブ
3
35
4
男性
5
72000
6
エンジニアリング
7
ソフトウェアエンジニア
8
10
9
修士
10
東京都千代田区4-5-6
11
03-9876-5432
12
bob@email.com
13
2012-08-20
14
高評価
15
401(k)、有給休暇
$
④行番号の位置を直す

 行番号とカラムが改行されているのでくっつけて同一行にします。
 Nは次の行も読み込んでパターンマッチングの対象とするコマンドです。
 sed -n 3p data.csv | sed s/,/\\n/g | sed = | sed 'N;s/\n/ /'

$ sed -n 3p data.csv | sed s/,/\\n/g | sed = | sed 'N;s/\n/ /'
1 2
2 ボブ
3 35
4 男性
5 72000
6 エンジニアリング
7 ソフトウェアエンジニア
8 10
9 修士
10 東京都千代田区4-5-6
11 03-9876-5432
12 bob@email.com
13 2012-08-20
14 高評価
15 401(k)、有給休暇
$

 できました!


以上です。