PowerShell - Replace character in specific column in csv file
I need to replace "-"
with ""
(nothing) in many csv files, except for a column Name
that may contain characters -
that I need to keep.
Example:
"Name", "timestamp", "CPU | Demand (%)", "CPU | Demand (%) (Trend)", "CPU | Demand (%) (30 days forecast)" "ZY02-LAB-WinMachine", "Mar 2, 2017 12:01:19 AM", "-", "38.07", "-" "ZY02-LAB-WinMachine", "Mar 21, 2017 10:45:00 AM", "40.55", "-", "-" "ZY02-LAB-WinMachine", "Apr 6, 2017 11:56:19 AM", "-", "-", "38.69" "ZY02-LAB-WinMachine", "Apr 6, 2017 12:11:19 PM", "-", "-", "38.7"
will become
"Name", "timestamp", "CPU | Demand (%)", "CPU | Demand (%) (Trend)", "CPU | Demand (%) (30 days forecast)" "ZY02-LAB-WinMachine", "Mar 2, 2017 12:01:19 AM", "", "38.07", "" "ZY02-LAB-WinMachine", "Mar 21, 2017 10:45:00 AM", "40.55", "", "" "ZY02-LAB-WinMachine", "Apr 6, 2017 11:56:19 AM", "", "", "38.69" "ZY02-LAB-WinMachine", "Apr 6, 2017 12:11:19 PM", "", "", "38.7"
The line I have in my script replaces ALL -
in the csv column .. even in the column Name
: - (
(Get-Content $ImportCPUFile) | % {$_ -replace "-"} | out-file -FilePath CSV-cleaned.csv -Fo -En ascii
source to share
Try something like this:
$Csv = Import-Csv -Path $ImportCPUFile;
$Headers = $Csv | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name;
ForEach ($Record in $Csv) {
foreach ($Header in $Headers) {
if ($Record.$Header -eq '-') {
$Record.$Header = [String]::Empty;
}
}
}
$Csv | Export-Csv -Path $OutputFile -NoTypeInformation;
Instead of comparison, you can use $Record.$Header.Trim() -eq '-'
for comparison if some fields have leading or trailing spaces.
source to share
Bacon Bits have very nice code, but I think it can be changed a little. What happens if the Name column is "-"?
$Csv = Import-Csv -Path $ImportCPUFile
$Headers = $Csv | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name;
ForEach ($Record in $Csv) {
foreach ($Header in $Headers) {
if ($Header -ne "Name") {
$Record.$Header = $Record.$Header.Replace("-","")
}
}
}
$Headers = $Csv | Get-Member -MemberType NoteProperty
$Csv | Export-Csv -Path $OutputFile -NoTypeInformation;
source to share