$csv1 = Import-Csv csv1.csv
$csv2 = Import-Csv csv2.csv
$merged = Merge-Csv -InputObject $csv1,$csv2 -ID "Invoice Number"
$merged | Select "Invoice Date","Invoice Number", @{name="CSV1InvStat";Expression={$_."CSV1 Invoice Status" -Replace "Open", "Unpaid" -Replace "Closed","Paid"}}, "CSV2 Invoice Status", "Customer", "Invoice Amount", "Paid Amount", @{Name=Diff;Expression={ $_."Invoice Amount" - $_."Paid Amount" }} | Sort "Invoice Number" | Export-Csv -encoding utf8 merged.csv
O resultado que obtenho parece:
Invoice Date Invoice Number CSV1InvStat CSV2 Invoice Status CSV1Amount ...
4/1/2016 INVPQ-0001 Paid Unpaid 3,000.00
6/30/2016 HKXLY43901 Paid Paid 500
O que eu quero fazer é comparar o campo "CSV1InvStat" com o "Status da fatura CSV2" depois de fazer a substituição:
$csv1 = Import-Csv csv1.csv
$csv2 = Import-Csv csv2.csv
$merged = Merge-Csv -InputObject $csv1,$csv2 -ID "Invoice Number"
$merged | Select "Invoice Date","Invoice Number", @{name="CSV1InvStat";Expression={$_."CSV1 Invoice Status" -Replace "Open", "Unpaid" -Replace "Closed","Paid"}}, "CSV2 Invoice Status",@{Name=StatusDiff;Expression={IF($_."CSV1InvStat" -eq $_."CSV2 Invoice Status") {0} Else {1}}}, "Customer", "Invoice Amount", "Paid Amount", @{Name=Diff;Expression={ $_."Invoice Amount" - $_."Paid Amount" }} | Sort "Invoice Number" | Export-Csv -encoding utf8 merged.csv
O problema é com:
@{Name="StatusDiff";Expression={IF($_."CSV1InvStat" -eq $_."CSV2 Invoice Status") {0} Else {1}}}
O que eu achei que me daria uma coluna em merged.csv após os status com um 1 se o status for diferente e um 0 se forem iguais. Parece que não funciona, eu só obtenho um 0 se eles combinam ou não. Acho que isso acontece porque o CSV1InvStat não existe tecnicamente nos dados.
Existe uma maneira de fazer isso, ou será melhor que os usuários memorizem uma fórmula do Excel (= SE (C2 = D2,0,1)) e façam isso manualmente?
Tags powershell