使用powershell在一个csv列中查找并替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用powershell在一个csv列中查找并替换相关的知识,希望对你有一定的参考价值。

我有一个大的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
答案

这是一种可行的方法。

# 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-ly的方法是这样的:

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。

以上是关于使用powershell在一个csv列中查找并替换的主要内容,如果未能解决你的问题,请参考以下文章

如何将查找和替换限制为仅 CSV 中的一列?

Powershell 替换 csv 对象

如何解析csv文件,查找触发器并使用PowerShell拆分成新文件

如何使用熊猫在特定列中的csv文件中查找特定单词

PowerShell - 从 csv 文件读取数据,比较特定列中的数据并将结果写入新文件

VBA使用列中找到的格式查找并替换工作表中找到的所有单元格