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

PowerShell: จะรวมไฟล์ CSV ได้อย่างไร


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

ข้อมูลเบื้องต้นเกี่ยวกับการรวมไฟล์ CSV กับ PowerShell

ก่อนที่เราจะเจาะลึกกระบวนการรวมไฟล์ CSV เราใช้เวลาสักครู่เพื่อทำความเข้าใจว่าทำไมเราจึงต้องใช้ PowerShell เพื่อรวมไฟล์ CSV ไฟล์ CSV มักใช้สำหรับจัดเก็บและแลกเปลี่ยนข้อมูล แถวแสดงถึงแต่ละบรรทัดของไฟล์ และเครื่องหมายจุลภาคหรือตัวคั่นที่กำหนดอื่นจะแยกแต่ละค่าภายในแถว เราสามารถเปิดไฟล์เหล่านั้นใน Excel และคัดลอกและวางข้อมูลด้วยตนเอง อย่างไรก็ตาม การจัดการไฟล์ CSV หลายไฟล์อาจเป็นงานที่น่าเบื่อและใช้เวลานาน คุณสามารถใช้ PowerShell ซึ่งเป็นภาษาสคริปต์ที่มีประสิทธิภาพ เพื่อทำให้งานต่างๆ เป็นแบบอัตโนมัติ รวมถึงการรวมไฟล์ CSV PowerShell มอบชุดคุณสมบัติที่มีประสิทธิภาพสำหรับการทำงานกับไฟล์ CSV ทำให้เป็นเครื่องมือที่เหมาะสำหรับการจัดการชุดข้อมูลขนาดใหญ่

ประโยชน์ของการใช้ PowerShell เพื่อรวมไฟล์ CSV

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

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

วิธีรวมไฟล์ CSV กับ PowerShell

มาดูขั้นตอนการรวมไฟล์ CSV กัน การรวมไฟล์ CSV ใน PowerShell สามารถทำได้อย่างง่ายดายโดยใช้ Import-Csv และ Export-Csv cmdlets สมมติว่าไฟล์ CSV สองไฟล์มีโครงสร้างเดียวกัน ต่อไปนี้คือตัวอย่างง่ายๆ ที่สาธิตวิธีการรวมไฟล์ให้เป็นไฟล์เดียว:


# Import the CSV files
$csv1 = Import-Csv -Path "C:\Scripts\Users\Users-1.csv"
$csv2 = Import-Csv -Path "C:\Scripts\Users\Users-2.csv"

# Merge the CSV files and export to a new CSV file
$csv1 + $csv2 | Export-Csv -Path "C:\Scripts\Users\MergedFile.csv" -NoTypeInformation

ในสคริปต์นี้ Import-Csv ใช้เพื่ออ่านเนื้อหาของ File1.csv และ File2.csv ลงในตัวแปร $csv1 และ $csv2 ตามลำดับ จากนั้นตัวดำเนินการ + จะใช้ในการเชื่อมอาร์เรย์ทั้งสองของระเบียน CSV เข้าด้วยกัน สุดท้ายนี้ Export-Csv จะใช้ในการเขียนข้อมูลที่รวมกันลงใน MergedFile.csv ด้วยการรวม cmdlets Import-Csv และ Export-Csv ทำให้เราสามารถรวมไฟล์ CSV หลายไฟล์ได้ในขณะที่ยังคงรักษาโครงสร้างและความสมบูรณ์ของข้อมูลไว้

PowerShell เพื่อรวมไฟล์ CSV ทั้งหมดในโฟลเดอร์

ลองจินตนาการว่าคุณมีไดเร็กทอรีที่ประกอบด้วยไฟล์ CSV จำนวนมาก โดยแต่ละไฟล์จะแสดงข้อมูลในช่วงเวลาหรือหมวดหมู่ที่กำหนด เพื่อทำการวิเคราะห์แบบครอบคลุม จำเป็นต้องรวมไฟล์เหล่านี้ให้เป็นไฟล์เดียว เพื่อให้แน่ใจว่าแถวส่วนหัวจะยังคงอยู่

คราวนี้มารวมไฟล์ CSV ทั้งหมดในโฟลเดอร์ด้วยความช่วยเหลือของสคริปต์ PowerShell! ใช้สคริปต์ต่อไปนี้:


#Parameters
$SourceFolder = "C:\Scripts\Users"
$Output = "C:\Scripts\Users\AllUsers.csv"

# Get a list of the CSV files in a directory
$CSVFiles = Get-ChildItem -Path $SourceFolder  -Filter "*.csv"

# Loop over each CSV file
ForEach ($CSVFile in $CSVFiles) {
    # Import the CSV file and Append to another
   Import-Csv $CSVFile.FullName | Export-Csv -Path $output -Append -NoTypeInformation
}

รหัสนี้จะรวมไฟล์ CSV ทั้งหมดในโฟลเดอร์ที่ระบุและบันทึกเอาต์พุตลงในไฟล์ใหม่ที่เรียกว่า "output.csv" โปรดทราบว่าไฟล์ CSV ทั้งหมดจะต้องมีคอลัมน์เดียวกัน ถ้าไม่เช่นนั้น คุณจะพบข้อผิดพลาด:

Export-Csv : ไม่สามารถผนวกเนื้อหา CSV ไปยังไฟล์ต่อไปนี้: C:\Scripts\Users\AllUsers.csv วัตถุที่ต่อท้ายไม่มีคุณสมบัติที่สอดคล้องกับคอลัมน์ต่อไปนี้: จดหมาย หากต้องการดำเนินการต่อด้วยคุณสมบัติที่ไม่ตรงกัน ให้เพิ่มพารามิเตอร์ -Force จากนั้นลองคำสั่งอีกครั้ง

การใช้ PowerShell เพื่อรวมไฟล์ CSV

PowerShell มีคุณสมบัติหลายอย่างสำหรับจัดการและรวมไฟล์ CSV ตัวอย่างเช่น คุณสามารถใช้ cmdlet “Select-Object” เพื่อเลือกคอลัมน์ที่ต้องการจากไฟล์ CSV คุณยังสามารถใช้ cmdlet “Sort-Object” เพื่อจัดเรียงข้อมูลภายในไฟล์ CSV นอกจากนี้ PowerShell ยังมี cmdlet อื่นๆ อีกหลายรายการสำหรับการทำงานกับไฟล์ CSV เช่น “Import-Csv”, “Export-Csv” และ “ConvertTo-Csv” นี่คือสคริปต์ PowerShell เพื่อรวมคอลัมน์ทั่วไปจากไฟล์ CSV หลายไฟล์:


# Get a list of the CSV files in a directory
$CSVFiles = Get-ChildItem -Path "C:\Scripts\Users" -Filter "*.csv"

# Initialize an array to hold the data from the CSV files
$CSVData = @()

# Loop over each CSV file
ForEach ($CSVFile in $CSVFiles) {
    # Import the CSV file
    $CSVContent = Import-Csv -Path $CSVFile.FullName

    # Add the data from the CSV file to the array
    $CSVData += $CSVContent
}

# Now, $csvData contains the combined data from all the CSV files
$CSVData | Export-Csv -Path "C:\Scripts\Users.csv" -NoTypeInformation

การต่อท้ายไฟล์ CSV พร้อมข้อมูลคอลัมน์เพิ่มเติม

ในบางกรณี คุณอาจต้องการเพิ่มข้อมูลคอลัมน์เพิ่มเติมลงในไฟล์ CSV ที่ผสาน ซึ่งอาจรวมถึงชื่อไฟล์ของไฟล์ต้นฉบับ การประทับเวลา หรือข้อมูลที่เกี่ยวข้องอื่นๆ ที่ให้บริบทกับข้อมูล

หากต้องการแนบไฟล์ CSV พร้อมข้อมูลคอลัมน์เพิ่มเติม คุณสามารถใช้ Add-Member cmdlet ใน PowerShell cmdlet นี้ช่วยให้คุณสามารถเพิ่มคุณสมบัติที่กำหนดเองให้กับออบเจ็กต์ ทำให้คุณสามารถแก้ไขข้อมูลก่อนที่จะส่งออกไปยังไฟล์ที่ผสาน

ต่อไปนี้คือสคริปต์ตัวอย่างที่สาธิตไฟล์ CSV ต่อท้ายพร้อมข้อมูลคอลัมน์เพิ่มเติม:


$sourceFolder = "C:\Scripts\Users"
$sourceFiles = Get-ChildItem -Path $sourceFolder -Filter *.csv
$outputFile = "C:\Scripts\Users\merged.csv"

$combinedOutput = foreach ($file in $sourceFiles) {
    $content = Import-Csv -Path $file.FullName
    $content | Add-Member -MemberType NoteProperty -Name 'Filename' -Value $file.Name -PassThru
}

$combinedOutput | Export-Csv -Path $outputFile -NoTypeInformation

ในสคริปต์นี้ เราใช้ Add-Member cmdlet เพื่อเพิ่มคุณสมบัติเพิ่มเติมที่เรียกว่า 'ชื่อไฟล์' ให้กับแต่ละแถวของไฟล์ CSV ค่าของคุณสมบัตินี้ถูกกำหนดเป็นชื่อของไฟล์ต้นฉบับโดยใช้ตัวแปร $file.Name ด้วยการเพิ่มคุณสมบัตินี้ เราจะสามารถระบุไฟล์ต้นฉบับสำหรับแต่ละแถวในไฟล์ CSV ที่ผสานได้อย่างง่ายดาย

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

การกรองข้อมูลไฟล์ CSV ที่ผสาน

หากต้องการกรองไฟล์ CSV ที่ผสานตามเกณฑ์เฉพาะ คุณสามารถใช้ Where-Object cmdlet:


$mergedData = Import-Csv -Path "merged.csv"
$filteredData = $mergedData | Where-Object { $_.Sales > 1000 }
$filteredData | Export-Csv -Path "filtered_data.csv" -NoTypeInformation

ในตัวอย่างนี้ เรานำเข้าไฟล์ CSV ที่ผสานโดยใช้ Import-Csv จากนั้นเราจะกรองข้อมูลตามเงื่อนไขเฉพาะ (ในกรณีนี้คือยอดขายที่มากกว่า 1,000) โดยใช้ cmdlet Where-Object สุดท้ายนี้ เราจะส่งออกข้อมูลที่กรองไปยังไฟล์ CSV ใหม่ชื่อ “filtered_data.csv” โดยใช้ Export-Csv

การใช้ Get-Content และ Add-Content เพื่อรวมไฟล์

หนึ่งในวิธีที่ง่ายที่สุดในการรวมไฟล์ CSV ใน PowerShell คือการใช้ cmdlets Get-Content และ Add-Content วิธีการนี้เกี่ยวข้องกับการอ่านเนื้อหาของไฟล์ CSV แต่ละไฟล์โดยใช้ Get-Content และผนวกเข้ากับไฟล์รวมใหม่โดยใช้ Add-Content มาดูกันว่าสามารถทำได้อย่างไร:


Get-Content "C:\Scripts\Users\*.csv" | Add-Content "C:\Scripts\Users\Merged.csv"

ในสคริปต์ข้างต้น เราระบุเส้นทางไปยังไฟล์ CSV โดยใช้ไวด์การ์ด *.csv เพื่อเลือกไฟล์ทั้งหมดที่มีนามสกุล .csv Get-Content cmdlet จะอ่านเนื้อหาของแต่ละไฟล์ และ Add-Content cmdlet จะต่อท้ายไฟล์ที่รวมกัน วิธีนี้ตรงไปตรงมาและมีประสิทธิภาพสำหรับการรวมไฟล์ CSV ที่มีโครงสร้างเดียวกัน อย่างไรก็ตาม ไม่สามารถจัดการสถานการณ์ที่จำเป็นต้องรักษาส่วนหัวไว้หรือเมื่อต้องจัดการกับไฟล์ CSV ที่มีโครงสร้างต่างกัน

การรักษาส่วนหัวและการข้ามส่วนหัวที่ซ้ำกัน

แม้ว่าวิธีการก่อนหน้านี้จะรวมไฟล์ CSV ได้สำเร็จ แต่ก็อาจส่งผลให้เกิดแถวส่วนหัวที่ซ้ำกัน ซึ่งอาจทำให้เกิดความท้าทายในระหว่างการวิเคราะห์ข้อมูล เพื่อเอาชนะสิ่งนี้ เราสามารถแก้ไขสคริปต์เพื่อเก็บแถวส่วนหัวไว้จากไฟล์แรก และข้ามแถวส่วนหัวในไฟล์ถัดไป นี่คือสคริปต์ที่อัปเดตซึ่งบรรลุเป้าหมายนี้:


#Parameters
$sourceFolder = "C:\Scripts\Users"
$outputFile = "C:\Scripts\Merged.csv"

$SourceFiles = Get-ChildItem -Path $sourceFolder -Filter *.csv

$FirstFile = $true
ForEach ($File in $SourceFiles) {
    $Content = Get-Content $File.FullName

    if ($firstFile) {
        $content[0] | Add-Content $outputFile
        $firstFile = $false
    }
    $content | Select-Object -Skip 1 | Add-Content $outputFile
}

ในสคริปต์ที่แก้ไขนี้ เราใช้ Get-Content cmdlet เพื่ออ่านเนื้อหาของแต่ละไฟล์ จากนั้นเราจะตรวจสอบว่าเป็นไฟล์แรกโดยใช้ตัวแปรบูลีน $firstFile หรือไม่ หากเป็นไฟล์แรก เราจะเพิ่มแถวส่วนหัวต่อท้ายไฟล์เอาต์พุต สำหรับไฟล์ที่ตามมา เราใช้ Select-Object cmdlet พร้อมด้วยพารามิเตอร์ -Skip 1 เพื่อยกเว้นแถวส่วนหัวและเพิ่มแถวที่เหลือต่อท้ายไฟล์เอาต์พุต เพื่อให้แน่ใจว่าไฟล์ที่ผสานจะมีแถวส่วนหัวเพียงแถวเดียวเท่านั้น

การจัดการไฟล์ CSV ขนาดใหญ่

หากคุณกำลังจัดการกับไฟล์ CSV ขนาดใหญ่หรือไฟล์จำนวนมาก สิ่งสำคัญคือต้องปรับกระบวนการรวมให้มีประสิทธิภาพสูงสุด วิธีหนึ่งในการบรรลุเป้าหมายนี้คือการใช้คลาส StreamReader และ StreamWriter จากเนมสเปซ System.IO วิธีการนี้ช่วยให้เราสามารถประมวลผลไฟล์ในรูปแบบการสตรีม และลดการใช้หน่วยความจำให้เหลือน้อยที่สุด มาดูกันว่าสามารถนำไปใช้ได้อย่างไร:


$sourceFolder = "C:\Scripts\Users"
$sourceFiles = Get-ChildItem -Path $sourceFolder -Filter *.csv
$outputFile = "C:\Scripts\merged.csv"

$streamWriter = [System.IO.StreamWriter]::new($outputFile)

ForEach ($File in $SourceFiles) {
    $streamReader = [System.IO.StreamReader]::new($file.FullName)

    # Skip the header row for subsequent files
    if ($streamReader.Peek() -ne -1) {
        $streamReader.ReadLine() | Out-Null
    }

    while ($line = $streamReader.ReadLine()) {
        $streamWriter.WriteLine($line)
    }

    $streamReader.Close()
}

$streamWriter.Close()

ในแนวทางที่ได้รับการปรับปรุงนี้ เราจะสร้างอินสแตนซ์ของคลาส StreamReader และ StreamWriter StreamReader อ่านเนื้อหาของแต่ละไฟล์ทีละบรรทัด โดยข้ามแถวส่วนหัวสำหรับไฟล์ถัดไป StreamWriter เขียนบรรทัดโดยตรงไปยังไฟล์เอาต์พุต ด้วยการประมวลผลไฟล์ในลักษณะสตรีมมิ่ง เราสามารถจัดการไฟล์ CSV ขนาดใหญ่หรือไฟล์จำนวนมากได้อย่างมีประสิทธิภาพโดยไม่ต้องใช้หน่วยความจำมากเกินไป

เทคนิคขั้นสูงสำหรับการรวมไฟล์ CSV กับ PowerShell

PowerShell มีเทคนิคขั้นสูงหลายประการสำหรับการรวมไฟล์ CSV ตัวอย่างเช่น คุณสามารถใช้ cmdlet “Join-Object” เพื่อรวมข้อมูลจากไฟล์ CSV หลายไฟล์ตามคอลัมน์ทั่วไป สิ่งนี้มีประโยชน์เมื่อคุณต้องการรวมข้อมูลจากหลายแหล่งให้เป็นชุดข้อมูลเดียว นอกจากนี้ PowerShell ยังมีเทคนิคขั้นสูงอื่นๆ อีกมากมายสำหรับการจัดการและการแปลงข้อมูลภายในไฟล์ CSV

ข้อผิดพลาดทั่วไปและวิธีแก้ปัญหา

เมื่อทำงานกับไฟล์ CSV สิ่งสำคัญคือต้องคำนึงถึงข้อผิดพลาดทั่วไปที่อาจเกิดขึ้นได้ ข้อผิดพลาดทั่วไปประการหนึ่งคือชื่อคอลัมน์ระหว่างไฟล์ CSV ไม่ตรงกัน เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าชื่อคอลัมน์ในไฟล์ CSV ทั้งหมดตรงกัน ข้อผิดพลาดทั่วไปอีกประการหนึ่งคือข้อมูลภายในไฟล์ CSV หายไปหรือไม่ถูกต้อง เพื่อแก้ไขข้อผิดพลาดนี้ คุณสามารถใช้ cmdlet “Where-Object” เพื่อกรองข้อมูลที่ไม่ถูกต้องออก

แนวทางปฏิบัติที่ดีที่สุดสำหรับการรวมไฟล์ CSV เข้ากับ PowerShell

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

ห่อ

ในคู่มือที่ครอบคลุมนี้ เราได้สำรวจวิธีการและเทคนิคต่างๆ สำหรับการรวมไฟล์ CSV โดยใช้ PowerShell ไม่ว่าคุณจะทำงานกับไฟล์จำนวนน้อยหรือจัดการกับชุดข้อมูลขนาดใหญ่ PowerShell มอบโซลูชันที่ยืดหยุ่นและมีประสิทธิภาพเพื่อทำให้กระบวนการรวมเป็นอัตโนมัติ เราได้ค้นคว้าวิธีการและเทคนิคต่างๆ ในการรวมไฟล์ CSV โดยใช้ PowerShell รวมถึงการรวมไฟล์โดยใช้ Get-Content และ Add-Content, การเก็บรักษาส่วนหัว, การรวมไฟล์ที่มีหลายคอลัมน์, การจัดการไฟล์ที่มีส่วนหัวที่แตกต่างกัน และการรวมไฟล์ขนาดใหญ่อย่างมีประสิทธิภาพ ด้วยการเลือกวิธีการที่เหมาะสมตามความต้องการเฉพาะของคุณ คุณสามารถมั่นใจได้ว่าข้อมูลของคุณจะถูกผสานอย่างถูกต้องและมีประสิทธิภาพ ดังนั้น เดินหน้าและใช้ประโยชน์จากพลังของ PowerShell เพื่อรวมไฟล์ CSV ของคุณได้อย่างราบรื่น ช่วยประหยัดเวลาและความพยายามในเวิร์กโฟลว์การวิเคราะห์ข้อมูลของคุณ

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