PowerShell遍历CSV列并根据其他CSV中的条件更改值

时间:2019-08-27 17:40:28

标签: powershell

我一直在尝试编写PowerShell脚本,该脚本在CSV列中循环,并将旧值更改为映射到搜索条件的新值。

CSV1:

Column1       Column2
TEST ANT  =   Test Ant,
ALPHA     =   Alpha,
OMEGA     =   Omega,

CSV2:

001234-Alpha-Bravo,
TTTTTTTTTT,
DATA:TEST-(RANDOM DATA)ANT,
ere393,
OMEGA-333,

基本上

  1. 导入CSV1,该CSV1包含第1列中的搜索条件并映射到第2列中的批准值。
  2. 导入包含一列原始数据的CSV2。
  3. 遍历搜索条件的第1列。
  4. 对于CSV1中的每一行,我想确定该字符串是否存在于CSV2中原始数据列的一个或多个行中(作为整个字符串或子字符串)。
  5. 如果字符串存在(整个字符串或子字符串),则将单元格原始数据替换为批准的值。
  6. 如果没有匹配项,请继续下一行。
  7. 使用新批准的值和未更改的值导出CSV。

我已经搜索并尝试了该网站上的许多示例,每个示例似乎都解决了我要解决的部分问题,但并非完全解决。哈希表似乎是最接近解决方案的表,但是原始数据可能是动态的,并且似乎无法将密钥与原始数据中字符串的任何部分进行匹配。

我尝试过的一个例子

$s = Import-Csv C:\SearchCriteriaCSV.csv

$searchCrit = $($s.Name)
$Imported = Import-Csv 'C:\ImportCSV.csv'

$Output = foreach ($i in $Imported) {
    foreach ($c in $searchCrit) {
        if ($c.Name -like "*$i*") {
            $i.Name = $c.Name
        }
    }
    $i
}

$Output
$Output | Export-Csv 'C:\ExportCSV.csv' -NoTypeInformation

另一个示例尝试过:

$RawNameFormatName = @{
    "ALPHA" = "Alpha";
    "OMEGA" = "Omega"
}

$csv = Import-Csv C:\ImportCSV.csv;
foreach($row in $csv) {
    $row.Name = $RawNameFormatName[$row.Name];
}

$csv | Export-Csv  "C:\ExportCSV.csv" -NoTypeInformation;

导出的CSV:

Alpha
TTTTTTTTTT
Test Ant
ere393
Omega

0 个答案:

没有答案