16
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CSVファイルを結合する

Last updated at Posted at 2014-03-26

コマンドプロンプトでは

> copy *.csv output.csv

とするとカレントディレクトリ内のCSVを容赦なく結合できていましが、PowerShell で同じコマンドを打っても怒られてしまいます。

PowerShell で同じ事ができないかというとそんなことはなくて、Get-Contentコマンドを利用すると概ね同じ様な処理をすることができます。

> Get-Content *.csv > output.txt

最後にoutput.txtoutput.csvに変更しておいてください。

Get-ContentコマンドでCSVファイルの中身を標準出力に出力する代わりに新しいCSVテキストファイルに送り込んでいるわけです。
Get-Contentコマンドにはcatというエイリアスも割り当てられているので

> cat *.csv > output.txt

としても同じ結果が得られます。

この結合の方法ではCSVファイルだけではなく、テキストベースのファイルならなんでも結合できるので便利です。
ただし、構造化されているテキストファイルをむやみに結合すると、パーサーに突っ込んだときに正しい内容が表示されないことがあるのでその辺は注意が必要です。

##追記
コメント欄でご指摘をいただいた通り、最初の投稿のまま実行するとCSVを再帰的に取得・出力してしまい処理が終わりません。
出力先ファイルの拡張子を変更するか、他のフォルダに出力先ファイルを指定する必要があります。

どうしても同じフォルダにイッパツで作りたい場合はこんなコマンドでイケました。
結構めんどいですね…。

PS1> dir *.csv -name | % { cat $_ >> output.csv } 

##さらに追記

CSVファイル名群を一回変数に入れておくと同じフォルダに結合したCSVを出力できますが、長くなってめんどいですね。

dir *.csv | sv csvArray;$csvArray | % { cat $_ } >> merged.csv

余談ですが、PowerShell のプロンプトからリダイレクトでテキストファイルを作ると文字のエンコードがUTF16LE-BOMとかになるのでOut-Fileで文字コード指定した方が不幸になりにくそうです。

dir *.csv | sv csvArray;$csvArray | % { cat $_ } | Out-File merged.csv -Encoding default
16
12
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?