使用powershell在csv中合并两行或多行

Ris*_*abh 0 powershell powershell-2.0

我从我们的一个客户那里收到一个文件,看起来像这样:(我向它添加了标题以便于处理)。样本输入:

PlanID,Date,Transaction,Type,Ticker,Amount,Cash
01,121211,div,mf,fjk,25,cash
01,121211,div,mf,fjk,30,cash
01.121211,buy,mf,fjk,55,cash
02,121211,div,sd,ejd,10,cash
02,121211,div,sd,ejd,15,cash
02,121211,buy,sd,ejd,25,cash
Run Code Online (Sandbox Code Playgroud)

我需要一种方法,通过总结每个 PlanID 的金额来将所有行与 Transaction='div' 组合在一起。这就是我希望我的输出看起来像的样子:

示例输出:

PlanID,Date,Transaction,Type,Ticker,Amount,Cash
01,121211,div,mf,fjk,55,cash
01.121211,buy,mf,fjk,55,cash
02,121211,div,sd,ejd,25,cash
02,121211,buy,sd,ejd,25,cash
Run Code Online (Sandbox Code Playgroud)

因此,在购买行之前只有一个 div 行(金额相加,将始终是购买金额)。任何想法如何解决这个问题将不胜感激?

非常感谢提前!

jon*_*n Z 5

Import-Csv input.csv | Group-Object planid, transaction | 
Select @{n="PlanId";E={($_.name -split ',')[0]}},
       @{n="Date";e={($_.group)[0].date}}, 
       @{n="Transaction";E={(($_.name -split ',')[1]).trim()}},
       @{n="Type";e={($_.group)[0].type}},  
       @{n="Ticker";e={($_.group)[0].ticker}}, 
       @{n="Amount";e={($_.group | measure-object amount -sum).sum}},
       @{n="Cash";e={($_.group)[0].cash}} |
Export-Csv output.csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

脚步:

  1. 导入 input.csv 文件
  2. 按计划和事务对对象进行分组
  3. 在输出中选择所需的属性
    1. PlanId = group-object 返回的对象的名称字段中逗号的剩余部分
    2. Transaction = group-object 返回的对象的名称字段中逗号右侧的任何内容
    3. 金额 = 每个分组对象的所有金额的总和
    4. 日期 = 每个分组对象的日期
    5. 类型 = 每个分组对象的类型
    6. 股票代码 = 每个分组对象的股票代码
    7. 现金 = 每个分组对象的现金
  4. 将对象导出到 output.csv(添加 notypeinformation 以去除带有类型信息的顶行)