วิธีรับบรรทัดที่ไม่ซ้ำจากไฟล์โดยใช้ PowerShell
เมื่อทำงานกับไฟล์ข้อความใน PowerShell ฉันได้รับข้อกำหนดให้แยกบรรทัดที่ไม่ซ้ำกันออกจากไฟล์ ฉันลองใช้วิธีการต่างๆ และคิดว่าจะแบ่งปันกับคุณ ในบทช่วยสอนนี้ เราจะตรวจสอบหลายวิธีในการรับบรรทัดที่ไม่ซ้ำจากไฟล์โดยใช้ PowerShell
รับบรรทัดที่ไม่ซ้ำจากไฟล์โดยใช้ PowerShell
PowerShell เป็นตัวเลือกที่ดีที่สุดสำหรับการทำงานของไฟล์ประเภทนี้ มาตรวจสอบแต่ละวิธีด้วยตัวอย่างที่สมบูรณ์
วิธีที่ 1: การใช้ Get-Unique Cmdlet
PowerShell Get-Unique cmdlet ได้รับการออกแบบมาเพื่อเปรียบเทียบแต่ละรายการในรายการที่เรียงลำดับกับรายการถัดไป กำจัดรายการที่ซ้ำกัน และส่งคืนอินสแตนซ์เดียวของแต่ละรายการเท่านั้น วิธีการนี้จำเป็นต้องเรียงลำดับอินพุตก่อน
นี่คือวิธีการทำงาน:
- อ่านไฟล์และจัดเรียงเนื้อหา: $lines=Get-Content “C:\MyFolder\MyExample.txt” | เรียงลำดับวัตถุ
- รับบรรทัดที่ไม่ซ้ำ: $uniqueLines=$lines | รับ-ไม่ซ้ำกัน
- ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่: $uniqueLines | ตั้งค่าเนื้อหา “C:\MyFolder\MyExample_unique.txt”
วิธีนี้ทำให้มั่นใจได้ว่าคุณจะได้รับบรรทัดที่ไม่ซ้ำใคร ด้านล่างนี้คือสคริปต์ที่สมบูรณ์
$lines = Get-Content "C:\MyFolder\MyExample.txt" | Sort-Object
$uniqueLines = $lines | Get-Unique
$uniqueLines | Set-Content "C:\MyFolder\MyExample_unique.txt"
$uniqueLines
ฉันรันสคริปต์ข้างต้น และมันแสดงผลลัพธ์ในคอนโซลและเขียนเป็นไฟล์ข้อความ ตรวจสอบภาพหน้าจอด้านล่าง
วิธีที่ 2: การใช้ Select-Object กับ - พารามิเตอร์เฉพาะ
ฉันขอแสดงวิธีง่ายๆ อีกวิธีหนึ่งให้คุณดู ใน PowerShell คุณสามารถใช้ Select-Object กับพารามิเตอร์ -Unique เมื่อเราใช้พารามิเตอร์ -Unique เราไม่จำเป็นต้องเรียงลำดับอินพุต
นี่คือวิธีการทำงาน:
- อ่านไฟล์และรับบรรทัดที่ไม่ซ้ำ: $uniqueLines=Get-Content “C:\MyFolder\MyExample.txt” | เลือก-วัตถุ-ไม่ซ้ำกัน
- ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่: $uniqueLines | ตั้งค่าเนื้อหา “C:\MyFolder\MyExample_unique.txt”
นี่คือสคริปต์ PowerShell ที่สมบูรณ์:
$uniqueLines = Get-Content "C:\MyFolder\MyExample.txt" | Select-Object -Unique
$uniqueLines | Set-Content "C:\MyFolder\MyExample_unique.txt"
$uniqueLinesลองดูภาพหน้าจอด้านล่าง ซึ่งให้ผลลัพธ์เหมือนด้านบนหลังจากที่ฉันรันสคริปต์ PowerShell โดยใช้โค้ด VS
วิธีที่ 3: การใช้ HashSet
หากคุณกำลังทำงานกับไฟล์ข้อความขนาดใหญ่ คุณสามารถใช้ HashSet เพื่อรับบรรทัดที่ไม่ซ้ำกันใน PowerShell
นี่คือวิธีการทำงาน
- เริ่มต้น HashSet และอ่านไฟล์:
$hashSet=[System.Collections.Generic.HashSet[string]]::new() $lines=Get-Content "C:\MyFolder\ MyExample.txt" - เพิ่มแต่ละบรรทัดใน HashSet:
foreach ($line in $lines) { $hashSet.Add($line) | ออก-Null - ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่:
$hashSet | ตั้งค่าเนื้อหา "C:\MyFolder\MyExample_unique.txt"
นี่คือสคริปต์ที่สมบูรณ์
# Step 1: Initialize the HashSet and read the file
$hashSet = [System.Collections.Generic.HashSet[string]]::new()
$lines = Get-Content "C:\MyFolder\MyExample.txt"
# Step 2: Add each line to the HashSet
foreach ($line in $lines) {
$hashSet.Add($line) | Out-Null
}
# Step 3: Output the unique lines to a new file
$hashSet | Set-Content "C:\MyFolder\MyExample_unique.txt"วิธีที่ 4: การใช้ Group-Object Cmdlet
ฉันขอแสดงวิธีสุดท้ายให้คุณดู
คุณยังสามารถใช้ Group-Object cmdlet ใน PowerShell เพื่อจัดกลุ่มแล้วเลือกบรรทัดที่ไม่ซ้ำกัน
นี่คือวิธีการทำงาน:
- อ่านไฟล์และจัดกลุ่มตามเนื้อหาบรรทัด:
$groupedLines=Get-Content "C:\MyFolder\MyExample.txt" | กลุ่มวัตถุ - เลือกบรรทัดที่ไม่ซ้ำ:
$uniqueLines=$groupedLines | สำหรับแต่ละวัตถุ { $_.ชื่อ - ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่:
$uniqueLines | ตั้งค่าเนื้อหา "C:\MyFolder\MyExample_unique.txt"
ด้านล่างนี้เป็นสคริปต์ที่สมบูรณ์
# Step 1: Read the file and group by line content
$groupedLines = Get-Content "C:\MyFolder\MyExample.txt" | Group-Object
# Step 2: Select unique lines
$uniqueLines = $groupedLines | ForEach-Object { $_.Name }
# Step 3: Output the unique lines to a new file
$uniqueLines | Set-Content "C:\MyFolder\MyExample_unique.txt"
$uniqueLinesหลังจากที่ฉันรันสคริปต์ด้านบนแล้ว คุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่าง
บทสรุป
ฉันหวังว่าตอนนี้คุณจะมีแนวคิดที่สมบูรณ์เกี่ยวกับวิธีรับบรรทัดที่ไม่ซ้ำจากไฟล์ใน PowerShell โดยใช้วิธีการต่างๆ เช่น Get-Unique Cmdlet, Select-Object พร้อมด้วย -Unique parameter และ Group -Object Cmdlet


