PowerShell सरणी से डुप्लिकेट मान निकाल रहा है


जवाबों:


193

का प्रयोग करें Select-Object(जिसका नाम है select) के साथ -Uniqueस्विच; उदाहरण के लिए:

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique

9
यह बहुत आसान था :-(। पॉवरशेल 2 में आप उपयोग कर सकते हैं Get-Unique(या gu) यदि आपका सरणी पहले से ही सॉर्ट किया गया है
जॉय

2
जोहान्स, गेट-यूनीक v1 :) में उपलब्ध है
शाय लेवी

2
शांत, यह ठीक काम करता है, सिर्फ एक नोट, यदि आप संक्षिप्त होना चाहते हैं, तो इसे छोटा भी किया जा सकता है -uselect -uमैं एक कमांड लाइन पर इसका उपयोग करूंगा, लेकिन एक कोड में लिखा गया है, यह पूर्ण PS शब्द का उपयोग करने का सुझाव दिया गया है:Select-Object -Unique
पापो

यह केवल एकल अंक के साथ काम करता है? सरणी की एक बड़ी सूची के लिए यह काम नहीं करता है।
ईगलडेव जूल

85

एक अन्य विकल्प का उपयोग करना है Sort-Object(जिसका उपनाम है sort, लेकिन केवल विंडोज पर)
-Uniqueस्विच के साथ , जो डुप्लिकेट को हटाने के साथ छंटाई को जोड़ती है:

$a | sort -unique

2
यह मेरी अगली समस्या को भी हल करता है कि मैं इसे कैसे सुलझाऊं। धन्यवाद!
पंजीकृत उपयोगकर्ता

2
यह भी एक छोटे से तेजी से लग रहा है।
गेनो पोम्पेओ

7

यदि आप पूरी तरह से बम साबित होना चाहते हैं, तो मैं यही सलाह दूंगा:

@('Apples', 'Apples ', 'APPLES', 'Banana') | 
    Sort-Object -Property @{Expression={$_.Trim()}} -Unique

आउटपुट:

Apples
Banana

यह Propertyपैरामीटर को पहले Trim()स्ट्रिंग्स का उपयोग करता है , इसलिए अतिरिक्त रिक्त स्थान हटा दिए जाते हैं और फिर केवल -Uniqueमानों का चयन करता है ।

अधिक जानकारी पर Sort-Object:

Get-Help Sort-Object -ShowWindow

1
बहुत बढ़िया जवाब। मेरी समस्या का समाधान Get-Uniqueकिया , क्योंकि रिक्त स्थान पर काम नहीं किया
Kolob Canyon

7
$a | sort -unique

यह केस-असंवेदनशील के साथ काम करता है, इसलिए अलग-अलग मामलों के साथ डुप्लिकेट स्ट्रिंग्स को हटा देता है। मेरी समस्या का समाधान किया।

$ServerList = @(
    "FS3",
    "HQ2",
    "hq2"
) | sort -Unique

$ServerList

उपरोक्त आउटपुट:

FS3
HQ2

यह भी कई सदस्यों के साथ सरणियों के लिए अच्छी तरह से काम करता है
JoeRod


2

मेरी विधि से आप डुप्लिकेट मानों को पूरी तरह से हटा सकते हैं, आपको उस सरणी से मान छोड़ सकते हैं जिसमें केवल 1 की गिनती थी। यह स्पष्ट नहीं था कि यह वही है जो ओपी वास्तव में चाहता था लेकिन मैं इस समाधान का एक उदाहरण ऑनलाइन खोजने में असमर्थ था। यही पर है।

$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'

($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name

2

चाहे आप उपयोग कर रहे हों SORT -UNIQUE, SELECT -UNIQUEया GET-UNIQUEपॉवर्सशेल 2.0 से 5.1 तक, दिए गए सभी उदाहरण एकल कॉलम सरणियों पर हैं। मुझे अभी तक यह कहा गया है कि Arrays में कई कॉलमों के साथ कार्य करने के लिए REMOVE डुप्लिकेट पंक्तियों के साथ पंक्ति में पंक्ति की एकल घटनाओं को छोड़ने या वैकल्पिक स्क्रिप्ट समाधान विकसित करने के लिए दोहराएं। इसके बजाय इन cmdlets ने केवल एक एरियर में पंक्तियों को लौटाया है जो ONCE के साथ विलक्षण घटना के साथ हुई और हर चीज को डुप्लिकेट किया। आमतौर पर मुझे रिपोर्ट को समाप्त करने के लिए एक्सेल में अंतिम CSV आउटपुट से मैन्युअल रूप से डुप्लिकेट को निकालना होगा, लेकिन कभी-कभी मैं डुप्लिकेट को हटाने के बाद पॉवर्सशेल के भीतर उक्त डेटा के साथ काम करना जारी रखना चाहूंगा।


यह वह जगह है जहाँ जहाँ वस्तु काम में आती है। आप पहले सूची को दाएं जहां क्लॉज का उपयोग करके सूची को संकीर्ण करते हैं, फिर उसे एक सॉर्ट-ऑब्जेक्ट पर पाइप करते हैं, सॉर्ट करने के लिए एक या अधिक कॉलम्स का चयन करते हैं, और सॉर्ट-ऑब्जेक्ट को -नीक दें।
LPChip
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.