PowerShell: 配列から条件に一致する要素を抽出(フィルタ)

PowerShellを使ったデータ処理において配列の操作は非常に重要です。 特に、特定の条件に合致する要素を抽出する「フィルタリング」は頻繁に使用される機能です。 本記事ではPowerShellを使用して配列から条件に一致する要素を抽出する方法を詳しく解説します。

数値配列から要素を抽出

数値データを含む配列から特定の条件に合う要素を抽出するには、主にWhere-Objectコマンドレットを使用します。

例えば、10以上の数値のみを抽出する場合は次のようにします:

$arr = 12, 3, 25, 9, 14, 10
$result = $arr | Where-Object {$_ -ge 10}
Write-Host $result
# 出力: 12 25 14 10

この例では、自動変数「$_」に配列の各要素が格納され、スクリプトブロック内の条件($_ -ge 10)がTrueとなる要素のみが抽出されます。

奇数のみを抽出したい場合は、次のようにします:

$arr = 12, 3, 25, 9, 14, 10
$result = $arr | Where-Object {($_ % 2) -eq 1}
Write-Host $result
# 出力: 3 25 9

この例では、2で割った余りが1の要素(奇数)のみを抽出しています。

文字列配列から要素を抽出

文字列データを含む配列からの要素抽出も、Where-Objectコマンドレットを使用して行います。

特定の文字列を含まない要素を抽出する例:

$arr = "a", "b", "a", "c", "d", "a"
$result = $arr | Where-Object {$_ -ne "a"}
Write-Host $result
# 出力: b c d

ワイルドカードを使用した検索も可能です:

$arr = "cat", "bat", "but", "cut"
$result = $arr | Where-Object {$_ -like "*a*"}
Write-Host $result
# 出力: cat bat

正規表現を使用したフィルタリングも行えます:

$arr = "cat", "bat", "but", "cut"
$result = $arr | Where-Object {$_ -match "c.*"}
Write-Host $result
# 出力: cat cut

使用する演算子

フィルタリングの条件を記述する際には、様々な演算子を使用します。主な演算子は以下の通りです:

種類演算子
比較演算子-eq, -ne, -gt, -ge, -lt, -le
文字列演算子-like, -notlike, -match, -notmatch

これらの演算子を使い分けることで、より複雑な条件でのフィルタリングが可能になります。

また、パフォーマンスを考慮する場合、Where-ObjectやSelect-Objectの使用は処理速度を低下させる可能性があります。そのため、大量のデータを処理する際は、パイプラインの使用を最小限に抑えるなどの工夫が必要になることがあります。

PowerShellのフィルタリング機能は非常に柔軟で強力です。配列の要素を条件に基づいて抽出することで、データ処理や分析の効率を大幅に向上させることができます。

PowerShell