Powershell создает список с разделителями-запятыми из массива IP-адресов, которые происходят $N раз

везде, где я смотрел, показал мне методы этого, которые работают с физическими файлами, но по какой-то причине не с массивом. Я бы предпочел не хранить эти данные, а затем вызывать их из файла и просто работать непосредственно с массивом, если это возможно. Я застрял с помощью 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

затем я делаю следующее, Чтобы получить список IP-адресов, которые происходят 5 или более раз в этом массиве:

($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

3 ответов


здесь вы идете, славный маленький ОДН-вкладыш для вас:

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

это выведет:

64.339.161.5,19.19.19.19,63.339.161.7

У меня были проблемы с этим решением от TheMadTechnician, но я нашел следующие работы отличными: $my_array -присоединяйтесь ","


еще быстрее / проще читать:

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

1,2,3,7

вы можете передать любой массив в сортировку с флагом-unique для dedupe; обернутая переменная может быть соединена с вашим предпочтительным разделителем.