【问题标题】:Powershell create a comma delimited list from array of IP's that occur $N number of timesPowershell 从出现 $N 次的 IP 数组创建逗号分隔列表
【发布时间】:2014-06-18 12:47:57
【问题描述】:

我看过的所有地方都向我展示了处理物理文件的方法,但无论出于何种原因,不适用于数组。我宁愿不存储这些数据,然后从文件中调用,如果可能的话,直接使用数组。我被困在使用 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

【问题讨论】:

    标签: arrays windows sorting powershell powershell-2.0


    【解决方案1】:

    给你,给你一个不错的小单行:

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

    这将输出:

    64.339.161.5,19.19.19.19,63.339.161.7
    

    【讨论】:

    • 非常感谢。奇迹般有效。我不敢相信我离答案如此之近,却没有意识到。令人沮丧,但再次非常感谢您。
    【解决方案2】:

    我对 TheMadTechnician 给出的解决方案有疑问,但发现以下方法效果很好:

    $my_array -join ","

    【讨论】:

    • 也为我工作。谢谢。
    • 这样做的问题是它会给所有 IP 以逗号连接,而不仅仅是唯一的,并且原始帖子只希望它存在 5 个或更多重复项,这不考虑任何一个.您的代码返回用逗号连接的所有 15 个 IP 地址。
    【解决方案3】:

    阅读速度更快/更简单:

    $test = (1,3,7,7,3,2,1)
    $($test | sort -Unique) -join "," 
    

    1,2,3,7

    您可以使用 -unique 标志将任何数组导入排序以进行重复数据删除;然后可以将包装的变量与您喜欢的分隔符连接起来。

    【讨论】:

    • 这与 mgood1 的答案有相同的问题。这会收集所有唯一条目,其中请求者只想要重复一定次数的项目。
    猜你喜欢
    • 2017-04-02
    • 2011-01-26
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多