2012-01-05 100 views
1

我PowerShell的新手,我有一個.csv文件是這樣的:如何從數組中替換項目?

Group1; User_A 
Group1; User_B 
Group2; User_A 
Group2; User_D 
Group2; User_C 

如何與空格代替從第一列項目,使我在組只得到第一個項目:

Group1; User_A 
     ; User_B 
Group2; User_A 
     ; User_D 
     ; User_C 

我想是這樣

$header = "Group", "User" 
$adg = Import-Csv "C:\temp\users.csv" -Header $header -Delimiter ";" 
$adg | ForEach-Object {$_ -replace "Group1", ""} 

,但我沒有線索如何進行

+0

你需要將結果作爲字符串還是作爲一組對象? – 2012-01-05 20:28:48

+0

作爲一個字符串,一般只需將其替換成組,然後回寫到$ adg – jrara 2012-01-05 20:31:35

回答

2

怎麼是這樣的:

$csv = Import-Csv "Test.csv" -Header "Group", "User" -Delimiter ";" 

$lastGroup = "" 
$csv | % { 
    if ($lastGroup -eq $_.Group) { 
     $_.Group = "" 
    } else { 
     $lastGroup = $_.Group 
    } 
} 

$csv | ConvertTo-Csv -Delimiter ';' -NoTypeInformation 

輸出:

"Group";"User" 
"Group1";"User_A" 
"";"User_B" 
"Group2";"User_A" 
"";"User_D" 
"";"User_C" 

更新:

只是這裏好玩的是輸出的東西,看起來完全像你的榜樣版本:

$csv = Import-Csv "C:\Documents and Settings\arisman1\Desktop\Test.csv" -Header "Group", "User" -Delimiter ";" 

$lastGroup = "" 
$longestGroupName = $csv | select -Expand Group | Measure-Object -Property Length -Maximum 

$csv | % { 
    if ($lastGroup -eq $_.Group) { 
     $_.Group = " " * $longestGroupName.Maximum 
    } else { 
     $lastGroup = $_.Group 
    } 
} 

$csv | ConvertTo-Csv -Delimiter ';' -NoTypeInformation | % {$_ -replace '"', ''} | select -Skip 1 

輸出:

Group1;User_A 
     ;User_B 
Group2;User_A 
     ;User_D 
     ;User_C 
+0

太棒了,作品很有魅力,非常感謝!!! – jrara 2012-01-05 20:47:27