2014-05-01 31 views
8

我看過的每個地方都向我展示瞭如何使用物理文件進行此操作的方法,但無論出於何種原因,都無法與數組一起使用。我寧願不存儲這些數據,然後從文件中調用,如果可能的話,直接使用數組。我使用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

回答

29

在這裏,你走了,一個可愛的小的一行爲您提供:

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

將輸出:

64.339.161.5,19.19.19.19,63.339.161.7 
+0

非常感謝。奇蹟般有效。我無法相信自己與答案如此接近,並沒有意識到這一點。令人沮喪,但非常感謝你。 – beardedeagle

8

我TheMad的解決方案出現問題技術員,卻發現下面的偉大工程: $ my_array -join 「」

+0

也爲我工作。謝謝。 – Ring

+2

這樣做的問題是,它會給所有的IP加上逗號,而不僅僅是唯一的,原始的文章只希望它有5個或更多的重複,這也沒有考慮到。您的代碼將返回所有15個以逗號連接的IP地址。 – TheMadTechnician

1

甚至更​​快/更簡單閱讀:

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

1,2,3,7

可以通過管道將任何使用-unique標誌對數組進行排序以重複數據刪除;包裹的變量可以與您的首選分隔符連接。

+0

這與mgood1的答案有同樣的問題。這會收集所有唯一條目,請求者只需要重複某些次數的項目。 – TheMadTechnician