PowerShellでCSVを手軽に表示・ソートするカスタムコマンド作成法
PowerShellでCSV表示・ソートをコマンド化

ビッグデータ時代のCSV活用とPowerShell

ビッグデータ時代にあって、データを可視化し、ビジネスの糸口や何かのきっかけを見出すことが可能になっている。オープンデータの流れも着実に広がり、公共機関や学術機関によるデータ公開も増加している。ビジネスシーンでもCSVなどのデータファイルが日常的に蓄積されていく。

前回、PowerShellからアプリケーションを開くコマンドをカスタマイズしたが、ターミナル上でCSVを手軽に開けるとよりスムーズになる。Import-Csvコマンドレットを使用すれば、CSVファイルの内容を簡単に表示できる。

Import-CsvコマンドレットでCSV表示

Import-Csvコマンドレット(公式API)を使えば、CSVファイルを表示可能だ。例えば、以下のコマンドでカレントフォルダ内のsample.csvを表示できる。

Pickt横長バナー — Telegram用の共同買い物リストアプリ

Import-Csv .\sample.csv

GitHubのオープンデータであるdevelopers.csvを表示する場合も同様だ。

数値で正しくソートする方法

表示をソートするにはSort-Objectを用いるが、数字を文字列(String型)として認識するため、そのままでは意図したソートにならない。例えば、開発者数でソートしてもString型のため、数値順にならない。

Import-Csv .\developers.csv | Sort-Object developers

int型に変換して数値としてソートするには、以下のようにする。

Import-Csv .\developers.csv | Sort-Object {[int]$_.developers}

これで目的の並びに近くなる。さらに降順(大きい→小さい)に並べ替えるには、-Descendingを末尾に加える。

Import-Csv .\developers.csv | Sort-Object {[int]$_.developers} -Descending

これが理想的な並びである。

CSV表示をコマンド化する

毎回コマンドレットを2つとパイプを繋げる処理を思い出したり探し出すのは面倒だ。そこで、コマンド化(csvopen)する方法を考えた。

まず、関数として定義する。

function csvopen { Import-Csv .\developers.csv | Sort-Object {[int]$_.developers} }

しかし、ファイル名と列名は毎回異なるので、引数で処理できるようにPowerShellのキーワードparamでパラメーター化する。

function csvopen { param( $A, $B ) Import-Csv $A | Sort-Object {[int]$_.$B} -Descending }

こうしておけば、毎回異なるファイル名、列名であっても引数で入力することで汎用化できる。プロファイルに追加するには、notepad $PROFILEでプロファイルを開き、.$PROFILEで反映させる。

今後の拡張性

当面はint型の数値でよいが、実際には小数点や金額などの項目をソートする際には、intではなくdoubleやdecimalなどの使用も考慮しなければならない。しかし、今回の用途ではこれで十分である。

Pickt記事後バナー — 家族イラスト付きの共同買い物リストアプリ