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

かわろぐ

技術、ボルダリング、セキュリティ、その他もろもろ

MENU

awk で CSV ファイルの必要な列だけ抜き出す方法

cygwin Linux

環境

  • WIndows 10
  • Cygwin

CSVの特定の列だけ全部欲しい

例えばこんなCSVがあるとします。

010,0001,00001,9291
010,0002,00005,7890
020,0002,00003,3213
020,0003,00002,4325
...

このCSVの2列目と4列目のみ欲しいデータで、エディタでは編集がツライくらい大きいCSV(40MBくらい)なので、なんとかほかの方法でサクッとやってしまいたかったのです。

Windows 標準でははどうにもならない様子なので、Cygwin というか Linux コマンドを調べると awk に行き着きました。

学生時代から存在は知っていましたが、どうもちゃんと使う機会が無かったので、この機会に色々調べてでかいCSVファイルを処理させてみました。

以下のコマンドを使うと、上記のサンプルCSVの2列目と4列目のみをCSV形式で出力してくれます。

$ cat sample.csv | awk 'BEGIN{FS=",";OFS=","} {print $2,$4}' > out.csv

特に固まることもなくすんなり出力してくれました。やっぱり大きなテキストや CSV を処理するときはコマンドが便利だなぁ。

行番号を追加したり、集計したりも出来るようなので、また近々お世話になりそうな予感です。

参考文献

[改訂第3版]Linuxコマンドポケットリファレンス

[改訂第3版]Linuxコマンドポケットリファレンス