なっく日報

技術やら生活やらのメモ

CSVファイルの特定の列を空文字にするコマンド

c0,c1,c2,c3,c4
c0,c1,c2,c3,c4
c0,c1,c2,c3,c4
c0,c1,c2,c3,c4
c0,c1,c2,c3,c4

の列の数を変えずにc1だけ消して、↓のようにするにはどうするか?

c0,,c2,c3,c4
c0,,c2,c3,c4
c0,,c2,c3,c4
c0,,c2,c3,c4
c0,,c2,c3,c4

cutコマンドを使うと

cut -d, -f 1,3- a.csv

c0,c2,c3,c4
c0,c2,c3,c4
c0,c2,c3,c4
c0,c2,c3,c4
c0,c2,c3,c4

cutだけに列自体消えてしまいます。

自分が思いついた方法はこう

perl -F, -lape '$F[1]="";$_=join(",",@F)' a.csv

結果、↓のようになります。

c0,,c2,c3,c4
c0,,c2,c3,c4
c0,,c2,c3,c4
c0,,c2,c3,c4
c0,,c2,c3,c4

awkでもいいかもですが一旦これで。

ちなみにperlのオプションは以下の通り

❯ perl -h

Usage: perl [switches] [--] [programfile] [arguments]
  -a                autosplit mode with -n or -p (splits $_ into @F)
  -e program        one line of program (several -e's allowed, omit programfile)
  -F/pattern/       split() pattern for -a switch (//'s are optional)
  -l[octal]         enable line ending processing, specifies line terminator
  -p                assume loop like -n but print line also, like sed