powershell - 如果来自另一个文件的引用正确,则将数据相加
问题描述
我有两个 CSV 文件,如下所示:
test.csv
:
"Col1","Col2" "1111","1" "1122","2" "1111","3" "1121","2" "1121","2" "1133","2" "1133","2"
第二个看起来像这样:
test2.csv
:
“数字”、“标志” "1111","ABC" "1122","DEF" "1111","ABC" “1121”,“ABC” "1133","GHI"
现在的目标是获得从test.csv
分配到“标志”的所有点的摘要test2.csv
。如您所见,参考是数字。
应该是这样的:
ABC = 8 防御 = 2 GHI = 4
我试图对此进行测试,但无法达到目标。到目前为止,我所拥有的是:
$var = "C:\PathToCSV"
$csv1 = Import-Csv "$var\test.csv"
$csv2 = Import-Csv "$var\test2.csv"
# Process: group by 'Item' then sum 'Average' for each group
# and create output objects on the fly
$test1 = $csv1 | Group-Object Col1 | ForEach-Object {
New-Object psobject -Property @{
Col1 = $_.Name
Sum = ($_.Group | Measure-Object Col2 -Sum).Sum
}
}
但这给了我以下输出:
ps> $test1 总和 Col1 --- ---- 4 1111 2 1122 4 1121 4 1133
我无法获得标志的摘要和映射。
解决方案
不确定我是否正确理解了您的问题,但我将假设对于“符号”列中的每个值,您要查找第二个 CSV 中“数字”列中的值,然后计算列的总和所有匹配的“Col2”。
为此,我将使用“Col1”中唯一值的预先计算的总和构建一个哈希表:
$h1 = @{}
$csv1 | ForEach-Object {
$h1[$_.Col1] += [int]$_.Col2
}
然后构建第二个哈希表来总结第二个 CSV 值的查找结果:
$h2 = @{}
$csv2 | ForEach-Object {
$h2[$_.signs] += $h1[$_.Number]
}
但是,当我处理您的示例数据时,“ABC”的值与您在问题中所说的期望结果不同:
名称 值 ---- ----- ABC 12 GHI 4 防御2
或者你的意思是你想总结每个标志的唯一数字的相应值?为此,您可以将第二个代码段更改为以下内容:
$h2 = @{}
$csv2 | Group-Object signs | ForEach-Object {
$name = $_.Name
$_.Group | Select-Object -Unique -Expand Number | ForEach-Object {
$h2[$name] += $h1[$_]
}
}
这将从您的问题中产生预期的结果:
名称 值 ---- ----- ABC 8 GHI 4 防御2
推荐阅读
- sql - 使用 time_bucket 的慢 TimescaleDB 查询
- ios - 与 fork 函数相关的 Xcode11 beta 链接器错误
- javascript - Angular 7,Ngrx,ExpressionChangedAfterItHasBeenCheckedError
- applescript - 未来日期小程序不会触发
- delphi - Stacked and normal Bar Series on single Chart in Delphi
- authorize.net - Authorize.Net 中的付款问题 - E00027“信用卡收费:无效响应”
- c++ - 如何在另一个线程中关闭 MFC 模态对话框并获取对话框返回值?
- php - 在 WooCommerce 电子邮件上查找/编辑订单详细信息元文本
- c# - ExecuteNonQuery 是等待触发器完成还是在插入/更新完成后完成?
- javascript - 在 Angular 中按顺序运行组件