可以结合 .csv where-object 过滤器吗?

tlo*_*ock 2 csv powershell

我正在尝试根据位置列过滤 .csv 文件。该列有各种位置条目,我只需要包含某些位置的行中的信息,然后该信息将导出到单独的 .csv 文件中。我可以通过使用每个位置过滤器多次搜索 .csv 文件来使其工作,但是在尝试将其合并为 1 个搜索时我没有任何运气。

我现在拥有的是:

    $csv = Import-Csv "${filepath}\temp1.csv"
    $csv | Where-Object location -like "co*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation
    $csv | Where-Object location -like "cc*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -Append -NoTypeInformation
    $csv | Where-Object location -like "dc*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -Append -NoTypeInformation
    $csv | Where-Object location -like "mf*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -Append -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

我想要的是下面的东西。我没有收到任何错误,但我得到的只是一个空白的 .csv 文件:

    $locations = "co*","cc*","dc*","mf*"
    $csv = Import-Csv "${filepath}\temp1.csv"
    $csv | Where-Object location -like $locations | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

我已经在这里潜伏了一段时间,我通常能够根据我发现的内容将剧本编成科学怪人,但我似乎无法找到任何关于此的内容。谢谢你的帮助。

mjo*_*nor 7

您可以使用交替正则表达式将多个-like测试替换为单个-match测试:

$csv = Import-Csv "${filepath}\temp1.csv"
$csv | Where-Object {$_.location -match  '^(co|cc|dc|mf)'} |
   select EmployeeNumber | 
   Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

您可以从字符串数组构建该正则表达式:

$locations = 'co','cc','dc','mf'
$LocationMatch = '^({0})' -f ($locations -join '|')

$csv = Import-Csv "${filepath}\temp1.csv"
$csv | Where-Object { $_.location -match  $LocationMatch } |
   select EmployeeNumber | 
   Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)