检查特定列中 CSV 中的值是否为空

Check if value in CSV in specific colum is empty

我有一个包含 3 列(Header1、Header2、Header3)的 CSV 文件,我需要检查第 2 列(header2)中每一行的值是否为空,如果是,则检查第 3 列(Header 3)中的值需要复制到同一行的第 2 列。我希望它是清楚的。

输入数据

Header1,Header2,Header3,
ABC,123,123,
AXY,,456,
XYZ,,152,
ASD,528,,

输出

Header1,Header2,Header3,
ABC,123,123,
AXY,456,456,
XYZ,152,152,
ASD,528,,

我厌倦了下面的代码,但它不起作用

$csvFile1 = Import-Csv -Path "D:\AA_servers.txt" -Delimiter ","
$ht = @{}
foreach ($item in $csvFile1) {
    if ([string]::IsNullOrEmpty($item.Header2)) {
        $ht[$item.Header2] = $line.Header3
    }
} 
$csvFile1 | Export-Csv -Path "D:\AA_servers.txt" -Delimiter ";" -NoTypeInformation 

感谢支持

我不知道 $ht 变量的用途是什么。
但是转储使代码工作。

概念验证:

$csv = ConvertFrom-Csv @'
Header1,Header2,Header3
ABC,123,124
AXY,,456
XYZ,,152
ASD,528,
'@

foreach ($row in $csv) {
    if ([string]::IsNullOrEmpty($row.Header2)) {
        $row.Header2 = $row.Header3
    }
} 
$csv

输出:

Header1 Header2 Header3
------- ------- -------
ABC     123     124
AXY     456     456
XYZ     15      15
ASD     528

实际使用:
(只需更改路径即可。)

$csv = Import-Csv -Path 'D:\AA_servers.txt'

foreach ($row in $csv) {
    if ([string]::IsNullOrEmpty($row.Header2)) {
        $row.Header2 = $row.Header3
    }
}

$csv | Export-Csv -Path 'D:\AA_servers.txt' -NoTypeInformation