【问题标题】:How to add data to last column of CSV using PowerShell?如何使用 PowerShell 将数据添加到 CSV 的最后一列?
【发布时间】:2019-01-15 11:05:26
【问题描述】:

我需要将数据添加到 CSV 文件的最后一列。我的测试文件看起来像:

姓名、年龄、办公室、部门、技能 千斤顶,24,IBM,零售 汤姆,32,MS,BFSI SAM,44,经理,测试

我已设法解析 CSV,但随后将数据添加到最后一列“SKILL”很困难。要求是在每行的最后一列添加单词“Java”

姓名、年龄、办公室、部门、技能 杰克,24,IBM,零售,Java 汤姆,32,MS,BFSI,Java SAM,44,MGR,测试,Java

请注意,添加到最后一列的值在各行中保持不变。

【问题讨论】:

  • 到目前为止你做了什么?你能读懂文件吗?修改有问题吗?保存吗?
  • 我已经设法解析了 csv,但是将数据添加到最后一列“SKILL”似乎很困难。要求是在每行的最后一列中添加单词“Java”
  • 请不要添加不相关的标签。 Powershell-v2.0 和 -v3.0 是特定于版本的标签,仅在无法使用其他版本时使用。 command-line 和 command-line-interface 与实际问题关系不大。

标签: powershell command-line command-line-interface


【解决方案1】:

您可以更改导入对象的SKILL属性值,并通过以下方式导出为CSV文件:

Import-Csv test.txt |
    ForEach-Object {$_.SKILL = "Java"; $_} |
    Export-Csv test_out.txt -NoTypeInformation

但是Export-Csv 在值周围添加了引号,所以test_out.txt 看起来像这样:

"NAME","AGE","OFFICE","DEPT","SKILL"
"jack","24","IBM","Retail","Java"
"tom","32","MS","BFSI","Java"
"SAM","44","MGR","Test","Java"

也许您应该简单地将",Java" 添加到每行的末尾第二行以后:

Get-Content test.txt |
    ForEach-Object { if($_.ReadCount -gt 1) { "$($_),Java" } else { $_ } } |
    Out-File test_out.txt

【讨论】:

    【解决方案2】:

    您可以简单地创建一个包含当前 csv 数据的对象,并使用字符串 Java 扩展该对象,如下所示:

    $results = @() # Empty array to store new created rows in
    $csv = Import-Csv "$PSScriptRoot\csvfile.csv"
    foreach ($row in $csv) {
        $properties = [ordered]@{
            NAME   = $row.NAME
            AGE    = $row.AGE
            OFFICE = $row.OFFICE
            DEPT   = $row.DEPT
            SKILL  = "Java"
        }
        # insert the new row as an object into the results-array
        $results += New-Object psobject -Property $properties
    }
    # foreach-loop filled the results-array - export it as a CSV-file
    $results | Export-Csv "new-file.csv" -NoTypeInformation
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2013-06-05
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多