2017-09-02 90 views
0

我對腳本一般來說有點新奇。我有一個CSV文件,我正在導入和修改數據,以便以更好的格式顯示。
我的問題是我想做的事情(我猜)在給定列的所有行foreach循環,如果數據不符合特定標準:Powershell導入CSV創建基於條件的新行

  1. 複製整個行到一個新行(保留 行中的所有其他數據)。
  2. 與「C列」

我基本上做一個import-csv $file的值替換「列B」的價值。我稍後會導出它。

這裏是一個例子:我基本上想要將Task2移動到Task1列中,如果存在除「 - 」之外的任何數據,然後我可以忽略Task 2列。

Import-csv給了我這樣的:

ID, TASK1, TASK2 
123, A,  --  
456, B,  --  
789, C,  D,  

But I want it to look like this: 

ID, TASK1, TASK2 
123, A , --  
456, B,  --  
789, C,  D,  
789, D,  D,     
+1

你可以發佈你的代碼嗎? – ShanayL

+0

它的確是$ CSV = import-csv 此刻。 – Tommy24

回答

-1

其他方法:

$data=import-csv "C:\temp\test.txt" 
$data + ($data | where TASK2 -ne "--" | %{$_.TASK1=$_.TASK2;$_}) 
+0

上面的方法刪除了Task1列中的原始數據,所以我認爲它需要添加一個新行並且不會影響任何當前行。 – Tommy24

+0

我的代碼給你你給出的例子的結果。解釋更好,我做到了;) – Esperento57

+0

實際上,我收回它,它確實工作,如果我只是創建一個新的ps對象。謝謝! – Tommy24

0

對於相對較小的CSV文件,這可能是一個辦法($ CSV + =重新創建每次VAR):

## Q:\Test\2017\09\03\SO_46018965.ps1 
$CSV = import-csv 'test.csv' 
foreach ($Row in $CSV){ 
    if ($Row.TASK1 -eq 'C'){ 
     $NewRow=[PSCustomObject]@{ 
      ID = $Row.ID 
      TASK1 = $Row.TASK2 
      TASK2 = $Row.TASK2} 
     $CSV+=$NewRow 
    } 
} 
$CSV 

輸出示例:

ID TASK1 TASK2 
-- ----- ----- 
123 A  -- 
456 B  -- 
789 C  D 
789 D  D 
+0

這工作,謝謝! – Tommy24