ค้นหาเว็บไซต์

วิธีรับบรรทัดที่ไม่ซ้ำจากไฟล์โดยใช้ PowerShell


เมื่อทำงานกับไฟล์ข้อความใน PowerShell ฉันได้รับข้อกำหนดให้แยกบรรทัดที่ไม่ซ้ำกันออกจากไฟล์ ฉันลองใช้วิธีการต่างๆ และคิดว่าจะแบ่งปันกับคุณ ในบทช่วยสอนนี้ เราจะตรวจสอบหลายวิธีในการรับบรรทัดที่ไม่ซ้ำจากไฟล์โดยใช้ PowerShell

รับบรรทัดที่ไม่ซ้ำจากไฟล์โดยใช้ PowerShell

PowerShell เป็นตัวเลือกที่ดีที่สุดสำหรับการทำงานของไฟล์ประเภทนี้ มาตรวจสอบแต่ละวิธีด้วยตัวอย่างที่สมบูรณ์

วิธีที่ 1: การใช้ Get-Unique Cmdlet

PowerShell Get-Unique cmdlet ได้รับการออกแบบมาเพื่อเปรียบเทียบแต่ละรายการในรายการที่เรียงลำดับกับรายการถัดไป กำจัดรายการที่ซ้ำกัน และส่งคืนอินสแตนซ์เดียวของแต่ละรายการเท่านั้น วิธีการนี้จำเป็นต้องเรียงลำดับอินพุตก่อน

นี่คือวิธีการทำงาน:

  1. อ่านไฟล์และจัดเรียงเนื้อหา: $lines=Get-Content “C:\MyFolder\MyExample.txt” | เรียงลำดับวัตถุ
  2. รับบรรทัดที่ไม่ซ้ำ: $uniqueLines=$lines | รับ-ไม่ซ้ำกัน
  3. ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่: $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 เราไม่จำเป็นต้องเรียงลำดับอินพุต

นี่คือวิธีการทำงาน:

  1. อ่านไฟล์และรับบรรทัดที่ไม่ซ้ำ: $uniqueLines=Get-Content “C:\MyFolder\MyExample.txt” | เลือก-วัตถุ-ไม่ซ้ำกัน
  2. ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่: $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

นี่คือวิธีการทำงาน

  1. เริ่มต้น HashSet และอ่านไฟล์: $hashSet=[System.Collections.Generic.HashSet[string]]::new() $lines=Get-Content "C:\MyFolder\ MyExample.txt"
  2. เพิ่มแต่ละบรรทัดใน HashSet: foreach ($line in $lines) { $hashSet.Add($line) | ออก-Null
  3. ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่: $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 เพื่อจัดกลุ่มแล้วเลือกบรรทัดที่ไม่ซ้ำกัน

นี่คือวิธีการทำงาน:

  1. อ่านไฟล์และจัดกลุ่มตามเนื้อหาบรรทัด: $groupedLines=Get-Content "C:\MyFolder\MyExample.txt" | กลุ่มวัตถุ
  2. เลือกบรรทัดที่ไม่ซ้ำ: $uniqueLines=$groupedLines | สำหรับแต่ละวัตถุ { $_.ชื่อ
  3. ส่งออกบรรทัดที่ไม่ซ้ำไปยังไฟล์ใหม่: $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

บทความที่เกี่ยวข้อง