【问题标题】:Powershell, Merging CSV Files with FileNamesPowershell,将 CSV 文件与文件名合并
【发布时间】:2016-03-19 09:50:24
【问题描述】:

大家好,我正在尝试将具有相同列数的多个 csv 文件合并到一个文件中,并带有一个显示文件名的额外列名,这是我想要的示例:

file01.csv
c01,c02,c03,c04,c05
A,1,4,2,3
B,5,4,6,4
file02.csv
c01,c02,c03,c04,c05
C,2,4,5,6
D,2,4,1,3

预期结果。

merged.csv
c01,c02,c03,c04,c05,Name
A,1,4,2,3,file01.csv
B,5,4,6,4,file01.csv
C,2,4,5,6,file02.csv
D,2,4,1,3,file02.csv

我尝试使用此代码。它合并了所有文件,但没有显示文件名:

Get-ChildItem "*.csv" | % { Import-csv -header c01,c02,c03,c04,c05 $_.FullName | select-object c01,c02,c03,c04,c05,@{e="$_.basename";n="Name" | Export-Csv Merged.csv }

【问题讨论】:

    标签: csv powershell merge


    【解决方案1】:

    您的文件和输出不是真正的 CSV,这是您遇到问题的地方。列在那里,但有一个必须处理的标题。让我们使用Get-Content 获取文件数据并忽略第一行。然后我们可以将剩余的数据转换为 CSV 对象。对于每一行,我们可以附加一个值,该值包含它源自的文件名。收集所有更新数据并在输出前加上“merged.csv”

    $path = "d:\temp"
    $mergedData = Get-ChildItem $path -Filter "*.csv" | ForEach-Object{
        $file = $_
        # Get the file data
        Get-Content $file.FullName | 
            # Skip the filename
            Select-Object -Skip 1 |
            # Now we can get CSV object in the same way that Import-CSV would generate 
            ConvertFrom-Csv | ForEach-Object{
                # Add the current filename as a column
                $_ | Add-Member -MemberType NoteProperty -Name "Name" -Value $file.Name -PassThru
            }
    # Convert back into raw, quoted data
    } | ConvertTo-Csv -NoTypeInformation
    
    # Prefix the header before the compiled data
    "merged.csv",$mergedData | Set-Content "$path\merged.csv"
    

    【讨论】:

    • Matt,这很好用,我修改了 "merged.csv",$mergedData 以满足我的需要,我需要解决的是如何获取 -Name "Name" -Value $file。名称”要插入到输出的第一列,目前它附加到最后一列。
    • @user177073 如果你不提前知道道具,那就更难了。我什至会考虑为此提出一个新问题。 (找不到一个)。 $mergedDataOrigProps = $mergedData | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name | Where-Object{$_ -ne "Name"}; $mergedData | Select Name,$mergedDataOrigProps。需要获取所有属性名称减去新的名称并构建一个新数组以供选择。
    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2014-03-12
    相关资源
    最近更新 更多