conf t

インフラエンジニアのメモ

サクラエディタでCSVの特定の列を抽出する方法

f:id:monaski:20150621030131p:plain:w500

前回に引き続きCSVの特定の列の合計を計算する方法です。

monaski.hatenablog.com

今回はサクラエディタを使います。
サクラエディタで合計まで計算するのは難しいので、特定の列の抽出までを行います。
抽出さえできればあとはエクセルに貼り付けたりすれば簡単に合計は計算できると思います。

サクラエディタCSVの特定の列を抽出する方法

以下のようなCSVがあったとします。
これの3列目だけ取り出す方法を考えます。

aaaa,bbbb,200,cccc
dddd,eeee,300,ffff
gggg,hhhh,400,iiii
jjjj,kkkk,500,llll

以下のように正規表現を用いた置換を使えば3列目だけ取り出すことができます。
正確にいうとこの置換を実行すると3列目以外が消えます。
その後抽出できた列をエクセル等で計算すれば合計が出せます。
(実はエクセルであれば最初からエクセルでカンマ区切りデータとして取り込めば勝手にカンマで分割してくれるので サクラエディタ使う必要はないのですが・・・。)

置換前
^([^,]*,){2}([^,]*){1},.*

置換後
\2

f:id:monaski:20150621025507p:plain:w500

正規表現を説明します。
^([^,]*,){2}が2個目のカンマまでとマッチします。
([^,]*){1}が2個目のカンマの後から、次のカンマの直前までとマッチします。
,.*が3個目のカンマとそれ以降にマッチします。
置換後の欄に記載されている\2は後方置換というやつで、後からすでにマッチしたグループ(カッコで囲んだ箇所)を参照できます。
\2は2番目のグループの参照になるため、②でマッチした範囲ということになります。
結果として、行全体から②だけを抽出することになります。

これを応用していけば好きな列を抽出できます。
例えば4列目を取り出したい場合は、①の{2}を{3}にして①を3列目までとマッチするようにしてください。
そうすれば、②が4列目とマッチできますので、\2で4列目を抽出できます。

裏ワザ

サクラエディタには矩形選択機能があり、この例のように列がきれいにそろっているのであれば、
矩形選択によってGUI操作で取り出せます。
やり方ですが、Altを押しながらコピーしたい範囲をドラッグして選択してください。
その後Ctrl + Cでコピーすればクリップボードに3列目だけがコピーされています。

f:id:monaski:20150621030131p:plain:w500

おまけ:サクラエディタCSVの列を揃えて表示させる

サクラエディタCSVファイルを見ると、カンマで揃っていないのでそもそも抽出したい行がどこなのか分かりづらくないですか?
カンマの列で揃えてきれいに表示させたいですよね?
以下の記事で紹介している方法を使えば、カンマで揃えて表示させることができますよ!

monaski.hatenablog.com