【问题标题】:CSV file editing using PowerShell使用 PowerShell 编辑 CSV 文件
【发布时间】:2014-01-15 11:56:07
【问题描述】:

我需要使用 PowerShell 脚本执行以下操作。

我在 CSV 文件中有以下数据。我需要根据提供的主题在名称后面附加另一个前缀

Name,Subject,Roll,Div
Mark,Agri,3,Div1,
Tom,CS,6,Div3,
Alex,Aero,9,Div6

假设我的主题是Agri,名称的前缀应该是P-。因此将保存相同的 CSV 文件并具有以下内容

Name,Subject,Roll,Div
P-Mark,Agri,3,Div1,
Tom,CS,6,Div3,
Alex,Aero,9,Div6

这是我目前所拥有的:

(Import-Csv E:\Test.csv -Delimiter ',') | ForEach-Object{

    if($_.Subject -match "Agri" )
    {
      $_ = "P-" + "$_";

    }
    else
    {
     $_ = "F-" + "$_";

    }

} | Export-Csv E:\Test.csv -Delimiter ',' 

【问题讨论】:

  • 我们可以看看你到目前为止尝试了什么吗?

标签: powershell csv


【解决方案1】:

我无法将它们放在一起 - 可能只是我对 powershell 语法一无所知。我可以使用以下两行代码来做到这一点:

($csv = Import-Csv E:\Test.csv -Delimiter ',') | ForEach {
    if ($_.Subject -match "Agri") {
        $_.Name = 'P-' + $_.Name
    } else {
        $_.Name = 'F-' + $_.Name
    }

}
$csv | Export-Csv E:\Test.csv -Delimiter ',' -NoType

注意:

$_ = "P-" + $_;

变成

$_.Name = "P-" + $_.Name;

【讨论】:

  • 我得到的是空白文件。我需要修改与输出相同的文件。我错过了什么吗?
  • 让我试着用文件测试一下。我测试了它,将所有内容都保存在 powershell 中并使用ConvertFrom-Csv
  • 我无法将这一切都集中到一行中。如果我先将$csv 存储到变量中,然后再执行$csv | Export-Csv E:\Test.csv -Delimiter ',',那么它可以正常工作...
  • 更新了两行答案
  • 这会在导出时删除文件中的内容。
【解决方案2】:

在我看来,在以下子句中使用了括号。

($csv = Import-Csv E:\Test.csv -Delimiter ',')

将在 ForEach 处理之前将 Import-Csv 的输出分配给 $csv,因此 ForEach 效果完全丢失。不确定 您的目的是使用这些括号。

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多