编辑
我的疏忽是,
数据集中的 没有分隔,这导致此答案无法按预期工作,因为在解析 CSV 时逗号被视为列分隔符。如果列数据是转义属性,我将保留它,因为它确实解释了如何按照您的预期一般操作数据。但是,下面的@AdminOfThings 答案应该适用于您的特定情况,并且将修复错误定义的列,而不依赖于首先将 CSV 内容解析为 CSV。
使用 导入数据Import-Csv
,然后删除,
第三列中的任何数据。这假设您没有值,,
小数点分隔符在哪里:
如果您在 CSV 中有标头,则无需定义标头名称或花哨地将 CSV 写回:
Import-Csv -Path \path\to\file.csv | Foreach-Object {
$_.ColumnName = $_.ColumnName -replace ','
} | Export-Csv -NoTypeInformation -Path \path\to\file.csv
其工作方式是我们将 CSV 作为可操作的 CSV 导入PSCustomObject
,然后对于每一行,我们采用具有大小的列名并,
从中删除。最后,我们将修改PSCustomObject
后的内容导出回原始 CSV。
如果您没有标题,它会变得有点棘手,因为我们必须定义临时标题,但Export-Csv
没有选项可以跳过写出标题:
Import-Csv -Path \path\to\file.csv -Headers Col1, Col2, Col3, Col4, Col5, Col6, Col7 |
Foreach-Object {
$_.Col3 = $_.Col3 -replace ','
} | ConvertTo-Csv | Select-Object -Skip 1 |
Set-Content -Path \path\to\file.csv
这与第一个代码块的作用相同,但由于我们不想导出临时标头,因此我们必须发挥创造力。首先,请注意我们使用临时标题名称引用目标列。不是将修改后的 CSV 对象直接传送Export-Csv
到ConvertTo-Csv
. 然后我们使用Select-Object
跳过转换后的 CSV 文本的第一行,即标题,因此我们只有行数据和列值。最后,我们使用Set-Content
将不带标题的 CSV 文本写回原始文件。