2014-09-24 74 views
0

所以我正在尋找使用Powershell分解CSV。 CSV由|定義這不是問題,我正在尋找將它分解成多個較小的csvs,同時保留原來的。休息會根據包含一個值列表的單個列中的值發生。
我迄今所做的是導入CSV(由分隔|),然後分解CSV文件

foreach($line in $csv) { 
if($columnValue -like $target1) { 
export-csv filename1.csv -Delimiter `| $line -append)} 
elseif($columnValue -like $target2) { 
export-csv filename2.csv -Delimiter `| $line -append)} 

不過,我不認爲這是正確的出口做的,我不希望有是引號(是的,我知道這是標準的,但我不希望他們)我也想從原來的csv標題被應用到孩子csvs和它沒有被應用。

對不起,如果那裏有一個更好的方式來格式化代碼仍然是新來的

回答

0

這裏就是我建議交換機cmdlet的迷死。它將某些事項與多個潛在匹配進行比較,並在適當的地方執行這些匹配。

Switch($csv){ 
    {$_.column -match $target1} {$_ | Export-CSV filename1.csv -append -delimiter '|'} 
    {$_.column -match $target2} {$_ | Export-CSV filename2.csv -append -delimiter '|'} 
    {$_.column -match $target3} {$_ | Export-CSV filename3.csv -append -delimiter '|'} 
} 
+0

謝謝!剛剛接觸PowerShell時,我不知道Java中有一個開關。有沒有任何有效的方法來擺脫每個領域的報價? – 2014-09-25 12:27:24

+0

不是很好。如果你這樣做會變得更加複雜。你必須在最後加載文件,並用''替換'',''或者使用convertto-csv,pipe去out-string(我認爲可能會跳過那一點),把同樣的東西換成一個ForEach循環,然後管道到Out-File -append。 – TheMadTechnician 2014-09-25 15:36:10

0
$data = import-csv $csvfile 
$data | ?{$_.val -eq $criteria1} | export-csv -path "File1.csv" 
$data | ?{$_.val -eq $criteria2} | export-csv -path "File2.csv"