Powershell:添加具有从正则表达式哈希表中检索的值的列



我是Powershell的新手,我正在尝试根据特定列和另一个包含正则表达式和相关值列表的CSV文件向csv文件添加一列。

我可以在阅读许多关于 Import-csv 和 Select-Object 的帖子时进行一些改进。

第一个匹配值应用于填充新列,在此方案中名为"首选项"。

输入

数据.csv

id name    first_name
-- ----    ----------
35 ALPHA   UNIFORM   
48 BRAVO   VICTOR    
39 CHARLIE WHISKEY   
42 DELTA   X-RAY     
59 ECHO    YANKEE    
64 FOXTROT ZULU      

正则表达式.csv

regex_key preference
--------- -----   
LP        MUSIC 
VO        VSOP
CH        CHORIZO 
.*        OTHER   

带有单个正则表达式的输出:正常

first_attempt.ps1

$single_preference = Import-Csv .data.csv |`
Select-Object *,
@{Name='preference';
Expression={if($_.name -match "CH"){"CHORIZO"} else {"OTHER"}}
} |`
Export-Csv -Path ".first_attempt_output.csv" -NoTypeInformation

first_attempt_output.csv

id name    first_name preference
-- ----    ---------- ----------
35 ALPHA   UNIFORM    OTHER     
48 BRAVO   VICTOR     OTHER     
39 CHARLIE WHISKEY    CHORIZO   
42 DELTA   X-RAY      OTHER     
59 ECHO    YANKEE     CHORIZO   
64 FOXTROT ZULU       OTHER  

使用多个正则表达式的输出:卡住

expected_result.txt

id name    first_name preference
-- ----    ---------- ----------
35 ALPHA   UNIFORM    MUSIC    
48 BRAVO   VICTOR     VSOP   
39 CHARLIE WHISKEY    CHORIZO
42 DELTA   X-RAY      OTHER   
59 ECHO    YANKEE     CHORIZO
64 FOXTROT ZULU       OTHER

如何修改上面的代码以便能够迭代regex_keys并获得预期的结果?

非常感谢您的帮助。

我会使用foreach遍历模式(不使用Foreach-Object不覆盖$_但您可以修改以匹配您的偏好(:

$data = Import-Csv .data.csv -Delimiter ';'
$patterns = Import-Csv .regex.csv -Delimiter ';'
$data | Select-Object *,@{Name='preference';Expression={
foreach ($p in $patterns) {
if ($_.name -match $p.'regex_key') {
$p.preference
break
}
}
}}

if中,如果检测到任何匹配,我使用break来停止循环执行。

最新更新