晴耕雨読

working in the fields on fine days and reading books on rainy days

[PowerShell] 複数ファイルを一つにまとめる (Get-Content)

PowerShellで複数ファイルを一つにまとめるには、複数ファイルを Get-Content で表示して、その内容を Set-Content で一つのファイルにまとめて書き込みます。 Set-Content を使うことで、エンコードが UTF-8 や SJIS であってもそのままのエンコードでファイルが作成されるため、文字化けしなくなります。

PS> Get-Content *.csv | Set-Content output.txt

Get-Content は cat と省略でき、Set-Content は sc と省略できるので、短く書く場合は以下のようなコマンドになります。

PS> cat *.csv | sc output.txt

補足:リダイレクト > を使うと文字化けする

テキストの内容が ASCII だけの場合は、リダイレクトの > を使っても問題ありません。 しかし、ファイルのエンコードが UTF-8 や SJIS だと、結果のファイルは文字化けしてしまいます。

PS> Get-Content *.csv > output.txt

ソートしてから保存する

文字列のソートは Sort-Object (sort) コマンドレットを使います。 Get-Content と Set-Content の間のパイプラインに Sort-Object を入れても、UTF-8 や SJIS はそのままのエンコードでファイルに保存されます。

PS> Get-Content *.csv | Sort-Object | Set-Content output.txt
PS> cat *.csv | sort | sc output.txt

ソートして重複を取り除いてから保存する

ソートした後に重複を取り除いてファイルに保存する場合は、Sort-Object の後に Get-Unique します。

PS> Get-Content *.csv | Sort-Object | Get-Unique | Set-Content output.txt
PS> cat *.csv | sort | gu | sc output.txt

以上です。