GBを超えるデータファイルやログファイルから、特定の文字列を含む行を検索して抜き出したいことは、仕事をやっていても度々発生します。簡単なやり方としては、Excelで読み込んで検索機能などを利用して抜き出すのが視覚的にも作業が出来るので簡単ですが、ExcelではGBを超えるようなデータファイルの場合は開くことが困難で、たとえ開くことが出来たとしても、動作が遅くて作業が困難で実用に耐えられないでしょう。
PowerShellを使ってCSVファイルから特定の文字列の行を抜き出す
Windowsの標準で提供されているPowerShellを利用して、特定の文字列の抜き取りする方法を紹介します。
以下のプログラムの中も指定する条件を自身が必要するファイルや文字列に書き換えてから、powershellを実行してください。実行中は画面に変化が無いので心配になりますが、気長に待って頂ければ必要なファイルが出来上がると思います。
実行時間は、対象となるCSVファイルの大きさに比例して長くなります。
PowerShellの指定する条件
- 対象となるCSVファイルパス:csvFilePath
- 出力するCSVファイルパス:outputFilePath
- 指定文字列:searchString
# CSVファイルのパス
$csvFilePath = "C:\path\to\your\file.csv"
# 検索する文字列
$searchString = "指定された文字列"
# 出力ファイルのパス
$outputFilePath = "C:\path\to\output\file.csv"
# 指定された文字列を含む行を抽出して出力ファイルに保存する関数
function Export-MatchingLines {
param (
[string]$InputFilePath,
[string]$SearchString,
[string]$OutputFilePath
)
$reader = [System.IO.File]::OpenText($InputFilePath)
$writer = [System.IO.File]::CreateText($OutputFilePath)
try {
while ($null -ne ($line = $reader.ReadLine())) {
if ($line -like "*$SearchString*") {
$writer.WriteLine($line)
}
}
} finally {
$reader.Close()
$writer.Close()
}
}
# 指定された文字列を含む行を抜き出して出力ファイルに保存
Export-MatchingLines -InputFilePath $csvFilePath -SearchString $searchString -OutputFilePath $outputFilePath
このほかに、CSVファイルを分割したい場面はよくあると思いますが、そちらは別記事を書いていますので参考にしてください。