jrara
jrara

Reputation: 16981

How to replace items from an array?

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

Answers (1)

Andy Arismendi
Andy Arismendi

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

Related Questions