2014-09-26 7 views
0

我想根據位置列過濾.csv文件。該列有各種位置條目,我只需要來自包含特定位置的行的信息,然後將該信息導出到單獨的.csv文件。我可以通過使用每個位置過濾器多次搜索.csv文件來實現它的功能,但是我試圖將它合併到1個搜索中時沒有任何運氣。可能結合.csv何處對象過濾器?

我現在擁有的是:

$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 

我一直潛伏在這裏了一段時間,我通常能夠從一起怪人腳本什麼我發現,但我似乎無法找到任何這方面的信息。謝謝你的幫助。

回答

1

您可以使用交替的正則表達式用單-match測試代替多個-like測試:

$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" -NoTypeInformation 
+0

謝謝mjolinor,完美地工作! – tlock 2014-09-29 10:12:19