大量のログファイルから特定の文字列を含む行のみ取得してファイルに出力という処理を
当初Powershellで行っていたがWindows Subsystem for LinuxのUbuntuを使用したらやはりWSLの方が圧倒的に速い。
具体的な時間は計っていないが前者は分単位で時間がかかっていたが後者は数秒で終わった。
使用したコマンドは
【Powershell】
Get-Content ".*.log" | Select-String "含む文字列1","含む文字列2" | Out-File -FilePath "ファイル名.log" -Width 99999
Get-Contentで取得元ファイル指定(ワイルドカード可)、Select-Stringで行に含む文字列を指定、Out-Fileに出力ファイルや一行の最大文字数を指定している。
(Out-Fileは1行が長いと自動で折り返される。ていうかLinuxと同じで>や>>でリダイレクト出来てそれだと折り返されないのか…)
Select-Stringのカンマ区切りはor文。
もっと複雑な条件を指定したい場合はSelect-StringではなくWhere-Objectを使用した。
一行が1万文字を超える行があったので何が何でも自動で折り返されないようOut-Fileの-Widthはヤケクソに99999を指定した。
【WSL(というかLinux)】
cat "./*.log" | grep -e '含む文字列1' -e '含む文字列2' > "ファイル名.log"
catで取得元ファイル指定(ワイルドカード可)、grepで行に含む文字列を指定(-eでor条件)、>で出力ファイル指定。