【问题标题】:Merge two CSV files into one将两个 CSV 文件合并为一个
【发布时间】:2016-07-21 06:39:08
【问题描述】:

我有两个没有任何唯一标识符的 CSV 文件。两个文件的行数总是相同。我想按原样合并它们(第二个 CSV 作为第一个 CSV 的附加列)。

file1.csv 的内容:

Server,Info  
server1,item1  
server1,item2  
server1,item3  
server2,item1  
server2,item2  
server2,item3  
server3,item1  
server3,item2  
server3,item3  

file2.csv 的内容:

Items,ColumnA,ColumnB,ColumnC  
item#1:,aa,jj,ss  
item#2:,bb,kk,tt  
item#3:,cc,ll,uu  
item#1:,dd,mm,vv  
item#2:,ee,nn,ww  
item#3:,ff,oo,xx  
item#1:,gg,pp,yy  
item#2:,hh,qq,zz  
item#3:,ii,rr,ab  

期待 csv 文件的输出:

Server,Info,Items,ColumnA,ColumnB,ColumnC  
server1,item1,item#1:,aa,jj,ss  
server1,item2,item#2:,bb,kk,tt  
server1,item3,item#3:,cc,ll,uu  
server2,item1,item#1:,dd,mm,vv  
server2,item2,item#2:,ee,nn,ww  
server2,item3,item#3:,ff,oo,xx  
server3,item1,item#1:,gg,pp,yy  
server3,item2,item#2:,hh,qq,zz  
server3,item3,item#3:,ii,rr,ab 

我在网上进行了深入搜索,但找不到任何解决方案...如果有人可以在这里为我提供一些答案,我将不胜感激...

【问题讨论】:

    标签: csv powershell


    【解决方案1】:

    您可以使用Get-Content cmdlet 读取两个 CSV 文件,使用 for 循环对其进行迭代,并使用格式字符串将它们连接在一起。最后,使用Out-File cmdlet 将新文件写回:

    $file1 = Get-Content 'Path_to_file1.csv'
    $file2 = Get-Content 'Path_to_file2.csv'
    
    $content = for ($i = 0; $i -lt $file1.Length; $i++)
    {
        '{0},{1}' -f $file1[$i].Trim(), $file2[$i].Trim()
    } 
    
    $content | out-file 'Path_to_file3.csv'
    

    【讨论】:

    • Martin 解决方案很棒,您可以在下面添加此行以使 csv 可读import-csv -path "Path_to_file3.csv" | export-csv -path "mergednew.csv" -Delimiter "," -notypeinformation
    • @Martin,非常感谢您的解决方案,添加行 Owl 提供它完美的工作:)
    • @Owl,非常感谢您为使 Martin 的解决方案完美运行而添加的一行 :)
    最近更新 更多