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

问题描述 投票:-1回答:1

我有一个大的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 search csv replace find
1个回答
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-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。

© www.soinside.com 2019 - 2024. All rights reserved.