Reputation: 16981
I'm powershell newbie and I have a .csv file like this:
Group1; User_A
Group1; User_B
Group2; User_A
Group2; User_D
Group2; User_C
How can I replace items with whitespace from the first column so that I get only the first item in group:
Group1; User_A
; User_B
Group2; User_A
; User_D
; User_C
I tried something like
$header = "Group", "User"
$adg = Import-Csv "C:\temp\users.csv" -Header $header -Delimiter ";"
$adg | ForEach-Object {$_ -replace "Group1", ""}
but I don't have a clue how to proceed
Upvotes: 1
Views: 6625
Reputation: 52567
How about something like this:
$csv = Import-Csv "Test.csv" -Header "Group", "User" -Delimiter ";"
$lastGroup = ""
$csv | % {
if ($lastGroup -eq $_.Group) {
$_.Group = ""
} else {
$lastGroup = $_.Group
}
}
$csv | ConvertTo-Csv -Delimiter ';' -NoTypeInformation
Output:
"Group";"User"
"Group1";"User_A"
"";"User_B"
"Group2";"User_A"
"";"User_D"
"";"User_C"
Update:
Just for fun here is a version that outputs something that looks exactly like your example:
$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
Output:
Group1;User_A
;User_B
Group2;User_A
;User_D
;User_C
Upvotes: 2