使用powershell在csv中组合两行或更多行

时间:2011-12-20 15:50:32

标签: powershell powershell-v2.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

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

示例输出:

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

因此,在买入行之前只有一个div行(总计金额,总是买入金额)。任何想法如何处理这一点将不胜感激?

非常感谢!!

1 个答案:

答案 0 :(得分:4)

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

<强>步骤:

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