【问题标题】:How to separate one row into multiple rows based on a single cell containing multiple values in the same row in a CSV file using PowerShell如何使用PowerShell根据CSV文件中同一行中包含多个值的单个单元格将一行分成多行
【发布时间】:2016-06-02 14:38:12
【问题描述】:

我正在尝试使用 PowerShell 循环遍历 CSV 文件的每一行,以根据分隔符 (;) 将该行中的特定单元格分隔为多行。我的数据将如下所示:

ID Name Invoices       Member Since 
1  John A123;A234;C316 1999 
2  Dave B219;C216      2010 
3  Jim  D213;E117;G214 2003

我需要输出如下所示:

ID Name Invoices Member Since 
1  John A123     1999 
1  John A234     1999 
1  John C316     1999 
2  Dave B219     2010 
2  Dave C216     2010 
3  Jim  D213     2003 
3  Jim  E117     2003
3  Jim  G214     2003

最后,我需要将此文件导出为新的 CSV 文件。任何帮助将不胜感激。我已经研究了几个小时,并且在寻找有关如何执行此操作的资源时遇到了很多困难。提前感谢您的帮助。

【问题讨论】:

    标签: csv powershell


    【解决方案1】:

    只需遍历每一行,检索Invoices,将其拆分为;,然后使用当前值为每个行创建一个新的PSCustomObject

    $x = Get-Content 'Path_to_your_csv'
    $y = $x | ConvertFrom-Csv -Delimiter ' '
    $y | Foreach {
        $current = $_
        $current.Invoices -split ';' | foreach  {
            [PSCUstomObject]@{
                ID = $current.ID
                Name  = $current.Name 
                Invoices  = $_
                Member  = $current.Member
                Since  = $current.Since
            }
        }
    } | ConvertTo-Csv -NoTypeInformation -Delimiter ' ' | % {$_ -replace '"',''}
    

    输出:

    ID Name Invoices Member Since
    1 John A123 1999 
    1 John A234 1999 
    1 John C316 1999 
    2 Dave B219 2010 
    2 Dave C216 2010 
    3 Jim D213 2003 
    3 Jim E117 2003 
    3 Jim G214 2003 
    

    注意:您可能希望采用分隔符(例如,使用制表符)...

    【讨论】:

    • Martin,当我提到一个我从未感谢过你的新项目时,我才意识到。我能够用这个答案解决一些问题。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多