ฉันจะลบรายการที่ซ้ำกันออกจากอาร์เรย์ PowerShell ได้อย่างไร
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
ฉันจะลบรายการที่ซ้ำกันออกจากอาร์เรย์ PowerShell ได้อย่างไร
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
คำตอบ:
ใช้Select-Object
(ซึ่งเป็นนามแฝงselect
) กับ-Unique
สวิตช์ เช่น:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
เย็นนี้ทำงานได้ดีเพียงหมายเหตุถ้าคุณต้องการที่จะกระชับมันอาจจะสั้นลงแม้กระทั่งการ select -u
ฉันจะใช้สิ่งนี้ในบรรทัดคำสั่ง แต่เขียนด้วยรหัสขอแนะนำให้ใช้ข้อความ PS แบบเต็ม:Select-Object -Unique
อีกทางเลือกหนึ่งคือการใช้Sort-Object
(ซึ่งเป็นนามแฝงsort
แต่เฉพาะใน Windows) กับ-Unique
สวิตช์ซึ่งรวมการเรียงลำดับกับการลบรายการที่ซ้ำกัน:
$a | sort -unique
ในกรณีที่คุณต้องการพิสูจน์ระเบิดอย่างเต็มที่นี่คือสิ่งที่ฉันขอแนะนำ:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
เอาท์พุต:
Apples
Banana
สิ่งนี้ใช้Property
พารามิเตอร์เป็นTrim()
สตริงแรกดังนั้นช่องว่างพิเศษจึงถูกลบออกจากนั้นจึงเลือกเฉพาะ-Unique
ค่า
ข้อมูลเพิ่มเติมเกี่ยวกับSort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
ไม่ได้ผลเพราะเว้นวรรค
$a | sort -unique
สิ่งนี้ใช้ได้กับกรณีที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ดังนั้นจึงลบสตริงที่ซ้ำกันด้วยกรณีที่แตกต่างกัน แก้ไขปัญหาของฉัน
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
ผลลัพธ์ข้างต้น:
FS3
HQ2
หากรายการเรียงลำดับคุณสามารถใช้Get-Unique cmdlet:
$a | Get-Unique
ด้วยวิธีการของฉันคุณสามารถลบค่าที่ซ้ำกันได้อย่างสมบูรณ์ทำให้คุณมีค่าจากอาร์เรย์ที่มีจำนวนเพียง 1 เท่านั้นไม่ชัดเจนว่านี่คือสิ่งที่ OP ต้องการจริงหรือไม่ แต่ฉันไม่สามารถหาตัวอย่างของโซลูชันนี้ทางออนไลน์ได้ นี่ไง
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
ไม่ว่าคุณจะใช้SORT -UNIQUE
, SELECT -UNIQUE
หรือGET-UNIQUE
จาก PowerShell 2.0-5.1 ตัวอย่างทั้งหมดให้อยู่ในอาร์เรย์คอลัมน์เดียว ฉันยังไม่ได้ทำให้สิ่งนี้ทำงานข้ามอาร์เรย์ที่มีหลายคอลัมน์เพื่อลบแถวที่ซ้ำกันเพื่อปล่อยให้เกิดแถวเดียวข้ามคอลัมน์ดังกล่าวหรือพัฒนาโซลูชันสคริปต์ทางเลือก แต่ cmdlet เหล่านี้จะส่งคืนเฉพาะแถวในอาร์เรย์ที่เกิดขึ้นครั้งเดียวโดยมีเหตุการณ์เอกพจน์และทิ้งทุกอย่างที่ซ้ำกัน โดยปกติฉันต้องลบรายการที่ซ้ำกันด้วยตนเองจากเอาต์พุต CSV สุดท้ายใน Excel เพื่อทำรายงานให้เสร็จ แต่บางครั้งฉันก็ต้องการทำงานกับข้อมูลดังกล่าวต่อไปใน Powershell หลังจากลบรายการที่ซ้ำกัน
Get-Unique
(หรือgu
) ได้หากอาร์เรย์ของคุณถูกจัดเรียงแล้ว