如何在PowerShell中过滤CSV列中的空值(附实操示例)
PowerShell过滤CSV指定列空值的正确方法
原代码存在的问题
- 错误使用
-Header参数:你的输入CSV第一行本身就是表头("#P","A","E","S"),添加-Header会把这一行当成普通数据行处理,同时强制替换表头为指定值,最终导致导出的数据包含原表头行,不符合预期。 - 过滤条件无效:CSV中的空值(
"")被Import-Csv解析为空字符串([string]::Empty),而非$null,所以$_.S -ne $null无法过滤掉S列为空的行。
正确实现方法
根据你期望的输出(将原表头#P改为P,并过滤S列空值的行),可以用以下代码:
Import-Csv -Path "test.csv" | # 重命名#P列为P Select-Object @{Name='P'; Expression={$_.'#P'}}, A, E, S | # 过滤S列不为空的行(空字符串也会被排除) Where-Object { $_.S -ne '' } | Export-Csv -Path "export.csv" -Force -NoTypeInformation
如果不需要修改表头,只是保留原表头#P并过滤空值,代码可以简化为:
Import-Csv -Path "test.csv" | Where-Object { $_.S -ne '' } | Export-Csv -Path "export.csv" -Force -NoTypeInformation
验证结果
运行正确代码后,export.csv的内容会和你期望的一致:
"P","A","E","S" "1","2","3","4" "D","F","G","H"
内容的提问来源于stack exchange,提问作者Intern99
相关产品推荐
相关产品推荐

