ablog

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

CSV を処理する Perl ワンライナーいろいろ

  • CSV の列数をカウントする
perl -F, -lane 'printf("%s:%d\n",$ARGV,$#F);$.>0 and close ARGV' *.csv
200911.csv: 21
200912.csv: 21
201001.csv: 21
201002.csv: 21
  • CSV の任意の列を頭0埋めする
# ヘッダ(1行目)を削除する
# 1列目、11列目の頭を12桁で0埋めする
# 3列目の頭を9桁で0埋めする
perl -F, -lane 'if($.>1){$F[0]=sprintf("%012d",$F[0]);$F[2]=sprintf("%09d",$F[0]);$F[10]=sprintf("%012d",$F[10]);print join(",",@F)};eof and close ARGV' *.csv
  • CSV の任意の列のみ抽出する
# 1列目、3列目、11列目以外を抽出する
perl -i -F, -lane 'print join(",",@F[1,3..9,11..$#F])' *.csv