これに似た質問がありますが、ひねりがあります:CSVのPowershellグループオブジェクトとそれをエクスポートする
私のファイルには42個の既存のヘッダーがあります。区切り文字は標準のコンマであり、このファイルには引用符はありません。
master_account_number,sub,txn,cur,last,first,address,address2,city,state,zip,ssn,credit,email,phone,cell,workphn,dob,chrgnum,cred,max,allow,neg,plan,downpayment,pmt2,min,clid,cliname,owner,merch,legal,is_active,apply,ag,offer,settle_perc,min_pay,plan2,lstpmt,orig,placedate
ファイルのデータ(最初の6列)は次のようになります。
master_account_number,sub,txn,cur,last,first
001,12,35,50.25,BIRD, BIG
001,34,47,100.10,BIRD, BIG
002,56,9,10.50,BUNNY, BUGS
002,78,3,20,BUNNY, BUGS
003,54,7,250,DUCK, DAFFY
004,44,88,25,MOUSE, JERRY
私は最初の列master_account_number
と4番目の列だけを扱っていますcur
。「master_account_number」列の重複をチェックしたいのですが、見つかった場合は、4番目の列「cur」から見つかった重複のみの合計を合計してから、合計した行を結合します。重複からの合計値は、cur
結合された行の値を置き換える必要があります。
そうは言っても、私たちの出力はそのように見えるはずです。
master_account_number,sub,txn,cur,last,first
001,12,35,150.35,BIRD, BIG
002,56,9,30.50,BUNNY, BUGS
003,54,7,250,DUCK, DAFFY
004,44,88,25,MOUSE, JERRY
これで問題が解決したので、この質問の違いは次のとおりです。出力ファイルの42列すべてをそのまま保持したいと思います。上で参照した他の質問では、入力は5列、出力は4列でしたが、これは私が達成しようとしていることではありません。ヘッダーがもっとたくさんあるので、42列すべてを個別に指定するのは嫌です。それはとにかく非効率的なようです。
私がこれまでに持っているコードについては...あまりありません。
$revNB = "\\server\path\example.csv"
$global:revCSV = import-csv -Path $revNB | ? {$_.is_active -eq "Y"}
$dupesGrouped = $revCSV | Group-Object master_account_number | Select-Object @{Expression={ ($_.Group|Measure-Object cur -Sum).Sum }}
最終的には、出力を入力と同じように見せたいのですが、出力のみが重複するアカウント番号の行をマージし、マージされた行にグループ化されたcur値の合計が含まれるすべての「cur」値をcurフィールドに追加する必要があります。
最終更新: Richのソリューションを試しましたが、エラーが発生しました。彼がこれに持っていたものを変更しました$dupesGrouped = $revCSV | Group-Object master_account_number | Select-Object Name, @{Name='curSum'; Expression={ ($_.Group | Measure-Object cur -Sum).Sum}}
そしてこれは私自身のコードが私に得たものを正確に私に与えるので私はまだ解決策を探しています。このCSVを42個のヘッダーすべてとともに出力する必要があります。重複のないアイテムでも。
私が試した他のこと:これでは、列に必要なデータが得られません。列はありますが、空白です。
$dupesGrouped = $revCSV | Group-Object master_account_number | Select-Object @{ expression={$_.Name}; label='master_account_number' },
sub_account_number,
charge_txn,
@{Name='current_balance'; Expression={ ($_.Group | Measure-Object current_balance -Sum).Sum },
last,
}
データの一部のみを変更する場合は、以下の方法もあります。
$dupesGrouped = $revCSV | Group-Object master_account_number | ForEach-Object {
# copy the first data in order not to change original data
$new = $_.Group[0].psobject.Copy()
# update the value of cur property
$new.cur = ($_.Group | Measure-Object cur -Sum).Sum
# output
$new
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加