【问题标题】:Find and replace inside one csv column with powershell用powershell在一个csv列中查找和替换
【发布时间】:2014-09-09 02:07:05
【问题描述】:

我有一个类似这样的大型 CSV 文件,名为 student.export.text

学号、姓氏、中间名、名、学号、年级、Dob

我正在尝试构建一个每晚运行的自动化任务,以便其他软件可以正确理解 CSV。

这是我的代码,但我遗漏了导致错误的内容。我是 Powershell 新手,希望得到一些建议。

任何帮助将不胜感激!

$Replacements = @{
  "5" = "AE";
  "7" = "ER";
  "10" = "FM";
  "12" = "HC";
  "14" = "JH";
  "18" = "LE";

    #...]
}


Import-Csv .\student.export.text | ForEach-Object {
    $_.Schoolid = $Replacements[$_.Schoolid]
    $_
} | Export-Csv -NoTypeInformation .\new.csv

【问题讨论】:

  • 这完全可以用 Powershell 来完成。事实上,可能有六种不同的方法可以做到这一点。你试过什么?
  • 老实说,除了打开原始导出并更改标题行以便软件可以理解输入之外,我没有设法正确执行任何操作。我对 powershell 完全陌生,不知道从哪里开始。你能帮忙吗?
  • 您可以尝试从这里开始:technet.microsoft.com/en-us/library/ee221100.aspx

标签: powershell search csv replace find


【解决方案1】:

这是一种可行的方法。

# declare hash table with School ID to School Name mapping
$schoolIdsToNames = @{
  "3" = "SchoolA";
  "4" = "SchoolB"
}

# import the CSV file
$csv = Import-Csv "C:\input.csv";

# for each row, replace the School ID field with the School Name
foreach($row in $csv) 
{
    $row.Schoolid = $schoolIdsToNames[$row.Schoolid];
}

# export the modified CSV
$csv | Export-Csv  "C:\replaced.csv" -NoTypeInformation;

在第一步中,我们设置了一个 PowerShell 哈希表(一种键值对列表),然后使用 Import-Csv 导入 CSV 文件并将其存储在 $csv 变量中。此 cmdlet 将从 CSV 的每一行创建一个我们可以轻松操作的对象。对于每一行,我们只需将Schoolid 字段替换为分配给$schoolIdsToNames 哈希表中ID 键的值。最后,我们将 CSV 导出到另一个文件。

另一种更基于 PowerShell 的方法是这样的:

Import-Csv "C:\test\school.csv" | Select-Object *, @{ Name = "SchoolName"; Expression = { $schoolIdsToNames[$_.Schoolid] } } | Export-Csv "C:\test\replaced2.csv" -NoTypeInformation

这一单行程序导入 CSV 并将其发送到管道中。对于每一行,我们使用Select-Object 选择行的所有属性并添加一个名为SchoolName 的新属性,使用与上述相同的基于哈希表的技术设置其值。最后,我们将对象列表导出为 CSV。

【讨论】:

  • 我在运行您的代码时不断收到此错误。索引操作失败;数组索引评估为 null。在 line:30 char:5 + $row.Schoolid = $schoolIdsToNames[$row.Schoolid]; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArrayIndex
  • 我成功了!我在导入文件中遇到问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多