【问题标题】:How to merge colums of multiple text files into one csv file using PowerShell?如何使用 PowerShell 将多个文本文件的列合并到一个 csv 文件中?
【发布时间】:2013-05-29 08:25:14
【问题描述】:

我有多个测量文件,每个文件都有一列数字数据。 (更新:脚本应该适用于可变数量的测量文件。)

data1.dat

1.0
2.0
3.0

data2.dat

10.0
20.0
30.0

...

dataN.dat

1
1
1

如何使用 Powershell 将这些数据文件合并到逗号分隔值文件中?

"data1","data2.dat",...,"dataN.dat"
1.0,10.0,...,1
2.0,20.0,...,1
3.0,30.0,...,1

相关

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    这是一种方法:

    $files = Get-ChildItem D:\temp *.dat
    $header = $files|foreach {$_.basename}
    $content= $files | foreach { ,(gc $_.fullname) }
    
    $lines = for($i=0; $i -lt $content[0].Count; $i++)
    {
        $line = for($x=0; $x -lt $files.count; $x++)
        {
            $content[$x][$i]        
        }
    
        $line -join ','
    }
    
    $lines | ConvertFrom-Csv -Header $header | Export-Csv data.csv
    

    【讨论】:

    • 你能解释一下foreach { ,(gc $_.fullname) }中的逗号吗?
    • 当然,逗号运算符是 PowerShell 中的数组构造运算符。它创建一个单元素数组并将结果放在第一个元素中。没有它,所有文件的所有行都将分配给 $content。删除它并打印 $content,你就会明白我的意思了。
    • 感谢您的评论,我找到了想要分享的stackoverflow.com/questions/11138288/…
    【解决方案2】:

    你可以试试这样的:

    $file1 = "C:\firstTxtFile.txt"
    $file2 = "C:\SecondTxtFile.txt"
    $outputFile = "C:\Output.txt"
    
    $file1String = Get-content $file1 
    $file2String = Get-content $file2
    
    '"data1.dat","data2.dat"' > $outputFile
    
    $counter = 0
    while(($file1String[$counter] -ne $null) -and ($file2String[$counter] -ne $null)){
        $Line = $file1String[$counter] + "," + $file2String[$counter]
        $line >> $outputFile
        $counter++
    }
    

    这将获取两个文本文件并将它们组合成一个输出文件。

    注意:每次运行时都会覆盖输出文件。

    【讨论】:

    • 谢谢。我更新了我的问题,以澄清脚本需要处理不同数量的文件,而不是固定数量。
    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2015-06-19
    • 2014-05-17
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多