LoginSignup
1
1

More than 3 years have passed since last update.

【PowerShell】配列の要素で同じ文字列をカウントして出力する方法

Posted at

PowerShellの情報がネット上にあまり落ちておらず、なかなかやりたいことができないので、マイナーなものでも今後メモっていきます。
もっと簡潔にかけるぞ!等のご指摘ありましたらどんどんコメントにお願いします。

▼ やりたいこと

ファイルの中身で、特定の文字列が何回使われているのか、それぞれ集計して出力したい。

配列への格納→整形→集計→必要な情報(プロパティ)のみ出力
上記の流れを簡単に説明します。

URLList.txt
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プロパティのみ出力させます。
これで完成。

1
1
1

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
1
1