首页 > 解决方案 > 检查特定列中 CSV 中的值是否为空

问题描述

我有一个包含 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 

谢谢你的支持。

标签: powershellcsvscript

解决方案


我不知道 $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

推荐阅读