windows - 在powershell中合并2个csv文件

标签 windows powershell csv merge add

这个问题在这里已经有了答案:





CMD or Powershell command to combine (merge) corresponding lines from two files

(6 个回答)


4年前关闭。




我有 2 个 csv 文件,我想从文件 A 到文件 B 添加一个新列到一个新文件。 Atm,它不从 A 取值。

文件 A.csv

ID    Name

1     Peter

2     Dalas

文件 B.CSV
Class

Math

Physic

新文件将是:
ID    Name   Class

1     Peter  Math

2     Dalas  Physics

两个文件的行数相同。

作为以下我正在使用的代码,我现在想知道如何从文件 A 中获取值并将其放入文件 B 中。
$CSV1 = Import-Csv ".\A.csv"
$CSV2 = Import-Csv ".\B.csv"


$CSV1 | ForEach-Object {
  $Value= $_
  $CSV2 | Select-Object *, @{Name='Information';Expression={ $Value}}

} | Export-Csv "C.csv" -NoTypeInformation

最佳答案

假设您的两个 CSV 文件正确对齐(例如,您想根据行号合并数据并且不通过任何其他键链接),我建议如下:

$CSV1 = Import-Csv ".\A.csv"
$CSV2 = Import-Csv ".\B.csv"

$CSV1 | ForEach-Object -Begin {$i = 0} {  
    $_ | Add-Member -MemberType NoteProperty -Name 'Class' -Value $CSV2[$i++].Class -PassThru 
} | Export-Csv "C.csv" -NoTypeInformation

说明:
  • 使用 -Begin将计数器设置为 0 的脚本 block (您可以在 ForEach-Object 之前执行此操作,但使用 -Begin 可以很好地将其目的链接到代码块)。
  • 使用 Add-Member 将 'Class' 属性添加到 CSV1 中的每一行,使用 CSV2 中该行的 Array 索引(并像使用 ++ 那样增加该索引)。
  • 使用 -PassThru切换以将对象返回到管道。


  • 如果你想反过来做(B > A),你可以采用相同的方法,但需要这样做:
    $CSV2 | ForEach-Object -Begin {$i = 0} {
        $CSV1[$i++] | Add-Member -MemberType NoteProperty -Name 'Class' -Value $_.Class -PassThru 
    } | Export-Csv "C.csv" -NoTypeInformation
    

    我真的很惊讶 $_.Class仍然可以作为新管道的另一边,但似乎是这样。

    您也可以像最初计划的那样使用计算表达式,但是您确实需要使用额外的变量来存储 $Class由于额外的管道:
    $CSV2 | ForEach-Object -Begin {$i = 0} {
        $Class = $_.Class
        $CSV1[$i++] | Select @{Name='Class';Expression={$Class}},*
    } | Export-Csv "C.csv" -NoTypeInformation
    

    关于windows - 在powershell中合并2个csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45097794/

    相关文章:

    windows - 在 Windows 上使用带有 Decklink 卡的 FFMpeg 进行流式传输

    powershell - 使用 Get-ChildItem -Exclude 或 -Include 不返回任何内容

    powershell - 导出-CSV 格式回车

    ant - 从 CSV 文件自动创建图表的工具(在 ANT 中)

    c++ - 从 Windows 服务启动子进程

    windows - 如何在 vim 中自动格式化(不仅仅是自动缩进)?

    c++ - std::get_time - 如何检查解析错误

    c# - PowerShell 中的 Linq.First 等价物是什么?

    powershell - Nagios PNP4Nagios平均整数值?

    Python CSV 编写器用额外的空格引用字符串