使用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拆分成新文件