web-dev-qa-db-ja.com

Powershellは、$ N回出現するIPの配列からコンマ区切りリストを作成します

物理ファイルで動作するが、何らかの理由で配列では動作しない、これを行う方法を、私が見てきたすべての場所で示しました。このデータを保存せずにファイルから呼び出して、可能であれば配列を直接操作するだけです。 PowerShell v2を使用して立ち往生していますが、これでも実行可能です。事前にご協力いただきありがとうございます。

次の値を持つ$net_finalという配列があります。

63.232.3.102
63.232.3.102
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
63.339.161.7
63.339.161.7
63.339.161.7
63.339.161.7
63.339.161.7

次に、以下を実行して、この配列で5回以上発生するIPのリストを取得します。

($net_final | Group-Object | Where-Object {$_.Count -ge 5} | Format-Table -HideTableHeaders -Property Name | Out-String).Trim()

これは私にこの出力を取得します:

64.339.161.5
19.19.19.19
63.339.161.7

ただし、同じ行でコンマで区切られているようには見えません。配列だけからコンマ区切りリストを作成することは、$net_final -Join ","($net_final | Select-Object -Unique) -Join ","のようなものとかなり複雑ではありませんが、$ N回発生する配列項目を取得する必要があります。

期待される出力

64.339.161.5,19.19.19.19,63.339.161.7

9
beardedeagle

さあ、あなたのための素敵な小さなワンライナー:

($net_final|group|?{$_.count -ge 5}|Select -ExpandProperty Name) -join ","

それは出力されます:

64.339.161.5,19.19.19.19,63.339.161.7
42

TheMadTechnicianのこのソリューションには問題がありましたが、次の作品がすばらしいことがわかりました:$ my_array -join "、"

10
mgood1