2016-09-13 30 views
0

我試圖使用PowerShell來修改基於以下條件CSV一行找到最好的辦法:Powershell的進口CSV條件爲

IF column TEST contains a WORD,WORD 
THEN do the following: 
1) copy the entire row once but keep only the FIRST WORD in column TEST 
2) copy the entire row again but keep only the SECOND WORD in column TEST 
3) delete the original row that had WORD,WORD in column TEST 

例子:

subject~school~TEST~code~year 
math~PADF~true,false~0943~2016 

我'd like:

subject~school~TEST~code~year 
math~PADF~true~0943~2016 
math~PADF~false~0943~2016 

我不是Powershell的專家,但我在玩弄使用import-csv,然後使用Get-Cont ent Foreach對象,但它不起作用。如果有人知道更簡單的方法或上述案例的解決方案,那太棒了!

謝謝

回答

1

知道更簡單的方法或以上

的情況下的解決方案通過編程,一般沒有這樣的事情爲「」的解決方案。寫你想要做的(好步驟1,2,3在你的問題),然後編造一些代碼做什麼:

Import-Csv D:\data.csv -Delimiter '~' | ForEach-Object { 

    if ($_.TEST -match ',')     # IF row.TEST contains a comma 
    { 
     $first, $second = $_.TEST.Split(',') # Get first and second words ready 

     $_.TEST = $first      # Output the record once with 
     $_         # first word 

     $_.TEST = $second     # and again with second word 
     $_         # 
    } 
    else 
    { 
     $_         # otherwise output it unchanged 
    } 
} | Export-CSV out.csv -Delimiter '~' -NoTypeInformation 

不能完全確定您刪除的意思,但你可以運行這個和Export-CSV out.csv -Delimiter '~' -NoTypeInformation,它會輸出到一個沒有原始WORD,WORD行的新文件。

+0

這工作出色!我有一個問題,Export-CSV out.csv -Delimiter'〜'-NoTypeInformation不適用於我。它會說:命令管道位置上的cmdlet Export-Csv 1 以下參數的供應值: InputObject:,我將按任何值並關閉,並且不會創建out.csv。我想在每個場景之後使用諸如「Set-Content $ outputfile」之類的東西:第一個/第二個字/未更改「但它不工作......會更容易一些,還是應該堅持使用export-csv?我嘗試了谷歌搜索 - NoTypeInformation'for powershell並沒有發現任何東西 – Awsmike

+0

@Awsmike我在我的答案中編輯了代碼,我正在考慮將它放在最後的一個特定位置(與用於提供輸入的'''管道相鏈接),我沒有不要說清楚,Export-CSV比Set-Content更好,因爲我們正在使用的是'[PSCustomObject]',而不是文本,所以他們需要某種轉換才能整齊地放入文件中 - 導出-CSV可以做到這一點 – TessellatingHeckler

+0

謝謝!我看到其他人在之後使用管道進行同樣的命令,並且工作正常,我讚賞關於Export-CSV與Set-Content的文獻。 – Awsmike