首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell,将CSV文件与FileNames合并

Powershell,将CSV文件与FileNames合并
EN

Stack Overflow用户
提问于 2015-12-14 00:36:53
回答 1查看 2.9K关注 0票数 2

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

代码语言:javascript
复制
file01.csv
c01,c02,c03,c04,c05
A,1,4,2,3
B,5,4,6,4
代码语言:javascript
复制
file02.csv
c01,c02,c03,c04,c05
C,2,4,5,6
D,2,4,1,3

预期结果。

代码语言:javascript
复制
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

我试过用这个密码。它合并了所有文件,但没有显示文件名:

代码语言:javascript
复制
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 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-14 01:31:46

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

代码语言:javascript
复制
$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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34258160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档