ablog

不器用で落着きのない技術者のメモ

CSV の列順を入れ替える Perl ワンライナー

% cat <<EOF >hoge.csv
A,B,C,D,E,F
A,B,C,D,E,F
A,B,C,D,E,F
A,B,C,D,E,F
A,B,C,D,E,F
EOF
% cat hoge.csv
A,B,C,D,E,F
A,B,C,D,E,F
A,B,C,D,E,F
A,B,C,D,E,F
A,B,C,D,E,F
% perl -lanF',' -e 'print join(",",@F[5,0..2,4,3]);' hoge.csv
F,A,B,C,E,D
F,A,B,C,E,D
F,A,B,C,E,D
F,A,B,C,E,D
F,A,B,C,E,D

すげ〜

@F[5,0..2,4,3]

こんな書き方できるんだ。知らんかった。めちゃ楽や。

こいつを使ってCSVデータの変換をサクっとできた。

perl -lanF',' -e '$F[6]=~s/<BR>$//i;@f6=split(/<BR>/i,$F[6]);print join(",",(@F[0..5],'explanation',@F[7..13],@f6,'EOD'));' from.csv > to.csv

参考

ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法

ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法


P.296 9.1.2 配列に対する高度な添え字アクセスの技法