2014-05-01 8 views
8

Überall, wo ich nachgesehen habe, habe ich Methoden gezeigt, die mit physischen Dateien arbeiten, aber aus irgendeinem Grund nicht mit einem Array. Ich möchte diese Daten lieber nicht speichern, dann aus einer Datei aufrufen und einfach mit dem Array arbeiten, wenn das möglich ist. Ich stehe mit PowerShell v2 fest, aber das sollte noch machbar sein. Ich schätze jede Hilfe im Voraus.

Ich habe ein Array $net_final genannt, die die folgenden Werte:

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 

ich dann die folgenden eine Liste von IP-Adressen zu erhalten, die 5 oder mehrmals in diesem Array auftreten:

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

Was mich diesen Ausgang bekommt:

64.339.161.5 
19.19.19.19 
63.339.161.7 

Allerdings kann ich nicht scheinen, dass sie in der gleichen Zeile durch Kommas getrennt sind. Eine kommagetrennte Liste nur aus dem Array zu machen, ist ziemlich unkompliziert mit Dingen wie $net_final -Join "," und ($net_final | Select-Object -Unique) -Join ",", aber ich muss Array-Elemente greifen, die $ N oft vorkommen.

Erwartete Ausgabe:

64.339.161.5,19.19.19.19,63.339.161.7

Antwort

29

Hier gehen Sie, einen netten kleinen Einzeiler für Sie:

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

Das wird ausgegeben:

64.339.161.5,19.19.19.19,63.339.161.7 
+0

Vielen Dank. Klappt wunderbar. Ich kann nicht glauben, dass ich der Antwort so nahe war und es nicht bemerkt habe. Frustrierend, aber nochmal vielen Dank. – beardedeagle

8

I hatte Probleme mit dieser Lösung von TheMad Techniker, aber fand folgende Werke groß: $ my_array -join ""

+0

Arbeitete auch für mich. Vielen Dank. – Ring

+2

Das Problem dabei ist, dass es alle IPs durch Kommas verbunden, nicht nur eindeutige, und der ursprüngliche Beitrag wollte nur dort, wo es 5 oder mehr Duplikate gab, die dies auch nicht berücksichtigt. Ihr Code gibt alle 15 mit Kommas verknüpften IP-Adressen zurück. – TheMadTechnician

1

Noch schneller/einfacher zu lesen:

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

1,2,3,7

Sie kann über die Pipeline jeden array in sort mit dem -unique Flag um zu deduplizieren; Die eingepackte Variable kann dann mit Ihrem bevorzugten Trennzeichen verknüpft werden.

+0

Dies hat das gleiche Problem wie die Antwort von mgood1. Dies sammelt alle eindeutigen Einträge, bei denen der Anforderer nur Elemente wünschte, die sich eine bestimmte Anzahl von Malen wiederholen. – TheMadTechnician

Verwandte Themen