我正在尝试根据位置列过滤.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我想要的是下面这样的东西。我没有收到任何错误,但我得到的只是一个空白的.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我已经在这里潜伏了一段时间了,我通常能够从我发现的东西中科学地发现一个脚本,但我似乎找不到任何关于这方面的东西。谢谢你的帮助。
发布于 2014-09-27 07:48:22
您可以使用交替正则表达式将多个-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您可以从字符串数组构建该正则表达式:
$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" -NoTypeInformationhttps://stackoverflow.com/questions/26069711
复制相似问题