読者です 読者をやめる 読者になる 読者になる

conf t

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

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

Windows

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

以下のような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

広告を非表示にする