CSV:Powershell: 删除单元格中包含特定单词的行

CSV:Powershell: Deleting rows containing specific word in the cell

我在根据要求解析 csv 和删除行时遇到问题。

  1. 我的csv文件格式不均匀,有很多列是空白的,但我希望它们被认为是正确的单元格
  2. csv 在实际 header 之前有一些行(行数不固定),底部可能有 2 行。我希望我的 csv 从 header 而不是第一行开始。

    Import-Csv file.csv | Get-Member

这段代码只给了我两个成员类型,但 csv 有超过 20 列

csv 示例:

1,ab

x,33,455

空行

x,12,134

还有几行

f,er,fsdvf

空行

header从这里开始,20+列

提前致谢

如果您知道 header(列),您总是可以强制 Import-Csv 使用这些列,即使文件的第一行另有说明:

Import-Csv file.csv -Header One, Two, Three, Four

缺点是您最终会得到一些您可能不需要的 objects。 作为替代方案,您可以找到符合 header 的行并使用 Get-Content/ConvertFrom-Csv 组合:

$line = Select-String -Path file.csv -Pattern ^One | 
    ForEach-Object LineNumber
Get-Content -Path file.csv | 
    Select-Object -Skip ($line - 1) | 
    ConvertFrom-Csv

正则表达式可能应该更冗长,但总的来说,这应该是最容易说服应用程序正确生成假 CSV 的。