使用PowerShell从现有CSV列复制值并添加到新列

ma8fv8wu  于 2022-12-15  发布在  Shell
关注(0)|答案(2)|浏览(144)

我有一个4列的CSV文件。我正尝试根据部门编号列的值将成本列的值复制到公司成本列。基本上,部门编号以8* 开头的任何成本都将被移动或复制到公司成本列。
供参考:
原件:
| 员工ID|所有者电子邮件|部门编号|费用|
| - ------|- ------|- ------|- ------|
| FG345| test@mail.com|小行星8894|四千六百五十四点四五|
| 78f54| test2@mail.co|小行星3453|小行星4994.15|
期望值:
| 员工ID|所有者电子邮件|部门编号|费用|公司成本|
| - ------|- ------|- ------|- ------|- ------|
| FG345| test@mail.com|小行星8894|四千六百五十四点四五|四千六百五十四点四十五|
| 78f54| test2@mail.co|小行星3453|小行星4994.15||
我尝试过使用foreach循环,但我必须承认我对PowerShell还是个新手,边学边用。到目前为止,我尝试过的代码如下所示:

$corpcosts= foreach($corpcost in $CSVImport.corpcosts){
        if($CSVImport.DepartmentNumber -eq "8*"){
            $CSVImport.DepartmentNumber + $CSVImport.Costs 
        }
    }
           
$CSVImport|Select-Object *, @{N= 'CorpCosts'; E={$corpcosts[$_.CorpCosts]}} |Export-Csv "$Env:temp/$OutputFile" -NoTypeInformation
qhhrdooz

qhhrdooz1#

只需对表达式进行一些更改,即可添加if语句来检查以数字8开头的部门,如果为真,则将Costs列填充到新的CorpCosts列中。

$CSVImport = Import-Csv Costs.csv
$CSVImport|Select-Object *, @{N= 'CorpCosts'; E={if($_.DepartmentNumber -like '8*'){$_.Costs}}} | Export-Csv "$Env:temp/$OutputFile" -NoTypeInformation
bybem2ql

bybem2ql2#

您可以只使用一个calculated property来完成此操作,对于比较,您可以使用.StartsWith或您选择的匹配运算符(-like '8*'-match '^8'),并不是说等式运算符不知道wildcard characters ( * )

Import-Csv path\to\source.csv |
    Select-Object *, @{N='CorpCosts';E={ if($_.DepartmentNumber.StartsWith('8')) { $_.Costs } }} |
    Export-Csv path\to\output.csv -NoTypeInformation

相关问题