PowerShellの情報がネット上にあまり落ちておらず、なかなかやりたいことができないので、マイナーなものでも今後メモっていきます。
もっと簡潔にかけるぞ!等のご指摘ありましたらどんどんコメントにお願いします。
##▼ やりたいこと
ファイルの中身で、特定の文字列が何回使われているのか、それぞれ集計して出力したい。
配列への格納→整形→集計→必要な情報(プロパティ)のみ出力
上記の流れを簡単に説明します。
URL1:https://qiita.com/test
URL2:https://qiita.com/test
URL3:https://qiita.com/test2
URL4:https://qiita.com/test2
URL5:https://qiita.com/test2
URL6:https://qiita.com/test3
<関係ない行(抽出したいくない)>
雑な例ですが、上記のような文字列からURLの部分だけ抽出し、集計して出力していきます。
##1.特定の文字列を検索して、マッチしていたら行ごと格納させる
$URLList = Select-String "URL[0-9]:" ./URLList.txt
Seect-Stringの結果が複数存在する場合は自動的に配列で変数に格納されます。
正規表現を使用したい場合は、""(ダブルクォート)で囲って記述します。
##2.配列の中身にある文字列を整形する
$formattedURL = $URLList -replace "URL[0-9]:",""
-replaceを使用して置換します。置換した結果は変数へ。
##3.集計を行い、必要な情報だけ出力させる
$formattedURL | Group-Object | Select-Object Name,Count | Out-File ./result
一番のミソ。
Group-Object
は、受け取ったオブジェクトをグループ化してくれる便利なコマンドです。
要は**「集計したい情報をパイプとかで渡してあげればうまいこと集計してやるぞ!」**的なコマンド。とても便利。
ただ、このままだと出力時の情報が多すぎるため、Select-Object
でCountとNameプロパティのみ出力させます。
これで完成。