【问题标题】:Powershell Change Field in a CSV fileCSV 文件中的 Powershell 更改字段
【发布时间】:2022-01-16 04:36:29
【问题描述】:

CSV 文件中的 Powershell 更改字段

问题:当从我的银行转账下载交易时,只说明“从支票转账”和“转账到支票”我正在尝试向收款人字段添加一些额外信息,以便我的财务软件将确定这两项交易一存一提实际上是一笔转账交易。 示例

  1. 将收款人字段从“Transfer to Checking”更改为“Transfer to Checking 8869”
  2. 将收款人字段从“转账自”更改为“转账自支票 8828”

我的Main.csv

DATE, CATEGORY, AMOUNT, PAYEE, ACCOUNT#
10/19/2021, Transfer Internal Account Transfer, 34.04, Transfer From Checking, 5197
10/19/2021, Food and Drink Restaurants Fast Food, -15.09, Sonic, 7029
10/21/2021, Transfer Payroll, 700.2, ACH Transaction, 8828
10/21/2021, Food and Drink, -3, POS Debit VENDING, 8828
10/21/2021, Shops Supermarkets and Groceries, -4.2, Walmart, 8828
10/22/2021, Transfer Payroll, 25, PAYCHECK, 3316
10/22/2021, Transfer Payroll, 100, PAYCHECK, 3720
10/22/2021, Transfer Internal Account Transfer, -50, Transfer To Checking, 5197
10/22/2021, Transfer Internal Account Transfer, 25, Transfer From Checking, 8185
10/22/2021, Transfer Internal Account Transfer, -25, Transfer To Checking, 8828
10/22/2021, Transfer Internal Account Transfer, -25, Transfer To Checking, 8828
10/22/2021, Transfer Internal Account Transfer, -325, Transfer To Checking, 8828
10/22/2021, Shops Convenience Stores, -4.05, Circle K, 8869
10/22/2021, Transfer Internal Account Transfer, 325, Transfer From Checking, 8869
10/22/2021, Transfer Internal Account Transfer, 25, Transfer From Checking, 9116
10/24/2021, Travel Gas Stations, -7.01, POS Debit SHELL/SHELL,  8869

这是我最初的尝试,我对 Powershell 还很陌生。

$Table1 = Import-csv -path $COMBO_CSV -Delimiter "," | sort date -Descending
$Table2 = Import-csv -path $COMBO_CSV -Delimiter "," | sort date -Descending | Where-Object {
        ($_.amount -like "-*") -and
        ($_.payee -like "Transfer to*") } 
$transfer_to=foreach ($t1 in $Table1) {
    :outer
     Foreach($t2 in $Table2) {
       If(($t1.date -eq $t2.date) -and (-$t1.amount -eq $t2.amount)-and (($t1.payee -like "Transfer from*") -and ($t2.payee -like "Transfer to*")))  {
           $t2.payee = "Transfer to $acctno"
           $t2
           break :outer
       } 
    }
}

【问题讨论】:

  • 替换的关键字总是“从检查8828”和“到检查8869”?

标签: powershell csv replace


【解决方案1】:

我宁愿添加一个包含所需信息的附加单元格,而不是更改原始数据......像这样:

$CSVInputData = @'
DATE, CATEGORY, AMOUNT, PAYEE, ACCOUNT#
10/19/2021, Transfer Internal Account Transfer, 34.04, Transfer From Checking, 5197
10/19/2021, Food and Drink Restaurants Fast Food, -15.09, Sonic, 7029
10/21/2021, Transfer Payroll, 700.2, ACH Transaction, 8828
10/21/2021, Food and Drink, -3, POS Debit VENDING, 8828
10/21/2021, Shops Supermarkets and Groceries, -4.2, Walmart, 8828
10/22/2021, Transfer Payroll, 25, PAYCHECK, 3316
10/22/2021, Transfer Payroll, 100, PAYCHECK, 3720
10/22/2021, Transfer Internal Account Transfer, -50, Transfer To Checking, 5197
10/22/2021, Transfer Internal Account Transfer, 25, Transfer From Checking, 8185
10/22/2021, Transfer Internal Account Transfer, -25, Transfer To Checking, 8828
10/22/2021, Transfer Internal Account Transfer, -25, Transfer To Checking, 8828
10/22/2021, Transfer Internal Account Transfer, -325, Transfer To Checking, 8828
10/22/2021, Shops Convenience Stores, -4.05, Circle K, 8869
10/22/2021, Transfer Internal Account Transfer, 325, Transfer From Checking, 8869
10/22/2021, Transfer Internal Account Transfer, 25, Transfer From Checking, 9116
10/24/2021, Travel Gas Stations, -7.01, POS Debit SHELL/SHELL,  8869
'@ |
ConvertFrom-Csv

$Result= 
foreach ($item in $CSVInputData) {
    $item | 
    Select-Object -Property *, @{
        Name = 'PAYEE_ADV'; Expression = {
            if ($_.PAYEE -match 'Transfer.*Checking') {
                $_.PAYEE + ' ' + $_.'ACCOUNT#'
            }
            else { '' }
        }
    }
}

$Result | 
    Format-Table -AutoSize 

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 2020-10-14
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多