2011-12-20 22 views
0

私はクライアントのファイルを次のように受け取っています。(これを簡単に処理するためにヘッダを追加しました)サンプル入力:2つ以上の行をcsvでpowershellを使用して結合する

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 

私は、各PLANIDのための彼らの量を合計することによって、トランザクション=「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 

、一つだけのdiv行(最大合計量で、常に購入金額になります)買いの行の前にあります。これにどのようにアプローチすればよいでしょうか?

ありがとうございます!

+0

PowerShellではなくExcelでこれを行う方が簡単ではないでしょうか? – Abbas

+0

それほど難しくはありませんが、私はそれを解決しようとしています; D – mjsr

答えて

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. グループPLANIDとトランザクション
  3. あなたの出力で必要なプロパティを選択することにより、オブジェクト
    1. PLANID =グループオブジェクトによって返されたオブジェクトの名前フィールドにカンマのまま残されているものはすべて
    2. グループ・オブジェクト
    3. 金額=グループ化されたオブジェクトごとに、すべての金額の合計
    4. 日=グループ化されたオブジェクトごとに日付
    5. タイプ=タイプによって返されるオブジェクトの名前フィールドにカンマの権利であるものは何でも
    6. 取引=オブジェクトグループ化されたあたり
    7. グループ化されたオブジェクトごとに
    8. ティッカー=ティッカーオブジェクト
  4. エクスポートはトップラインウィットを取り除くためにnotypeinformationを追加(output.csvするグループ化されたオブジェクトごとに=現金
  5. 現金hタイプの情報)
+0

私はほとんどそこにいました!あなたは私を倒す、素敵なコード! – mjsr

関連する問題