So at the momemt I\'m searching for a way to merge 2 CSV files.
Here is an example for what I mean:
CSV1
\"Name\",\"Count\"
\"Klaus\",\"3\"
\"Han
Import the CSV files and convert each to a hash table, then find the common names:
$csv1 = Import-Csv -Path csv1.csv
$csv2 = Import-Csv -Path csv2.csv
$HashCSV1 = @{}
$HashCSV2 = @{}
$HashMerge = @{}
foreach($r in $csv1)
{
$HashCSV1[$r.Name] = $r.Count
}
foreach($r in $csv2)
{
$HashCSV2[$r.Name] = $r.Count
}
foreach ($key in $HashCSV1.Keys) {
if ($HashCSV2.ContainsKey($key)) {
$HashMerge[$key] = [int]$HashCSV1[$key] + [int]$HashCSV2[$key]
} else {
$HashMerge[$key] = $HashCSV1[$key]
}
}
foreach ($key in $HashCSV2.Keys) {
if (-not $HashCSV1.ContainsKey($key)) {
$HashMerge[$key] = $HashCSV2[$key]
}
}
&{$HashMerge.getenumerator() |
foreach {new-object psobject -Property @{Name = $_.name;Count=$_.value}}
} | export-csv merge.csv -notype
You can use Group-Object
(alias group
) to group everything by the Name
property. Then you just need to sum up the Count
property of each guy in the group. Measure-Object
(alias measure
) will do sums for you.
$grouped = Import-Csv .\csv1.csv, .\csv2.csv | group Name
$combined = $grouped |%{
New-Object PsObject -Prop @{ Name = $_.Name; Count = ($_.Group | measure -sum -prop Count).Sum }
}
$combined | Export-Csv .\combined.csv -NoType