Powershell - 查询 CSV 列名称并将其写入新的 CSV



所以我正在尝试查看 CSV 中的列名,将它们写入数组,然后将数据吐出到附加新列的新 CSV 中。 我真的不在乎当前数据表的外观,只要我可以在标题中添加一列。 这似乎是一件相当基本的事情,但我似乎找不到任何人这样做的任何情况。 例如:

"Name","Location","Phone"
"John Smith","Toronto","555.555.5555"
"Jane Doe","Dallas","555.555.5554"

我只想保留"名称"、"位置"和"电话"列名称,并将它们放入另一个带有额外列的 CSV 中。 问题是,实际上,有更多的列,它们并不总是相同的,因此脚本需要能够与列名无关。 我应该能够向它提供任何具有不同名称的任意数量的列的 CSV,并能够获得仅包含列名称的输出文件。 我已经尝试了至少十几种不同的方法来做到这一点,并不断遇到不同的问题。

例:

$validatedfilepath = "validfile.csv"
$csvData = New-Object PSObject
$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
$csvdata = $csvdata | get-member -Name * -MemberType NoteProperty
$csvData = @($csvData.Name)
$csvData

这将向我显示我想要的新有效文件中的列名的确切列表,但我不知道如何将其作为列名导出到 CSV 中。 每次我尝试做 export-csv 时,它要么为我提供每个新行中的字符长度计数,要么为我提供其他一些愚蠢的东西。

谢谢

Export-CSV从输入对象的成员读取列名。所以你已经走在正确的轨道上,你只需要简化一点,像这样:

$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
# You can now modify/enrich/filter the data somehow, for example like $csvdata[0].ID = 56387, then just export it:
$csvData | Export-CSV -NoTypeInformation -Path "newfile.csv"

您所做的错误是用Get-Member结果覆盖$csvdata中的导入数据。然后你用@($csvData.Name)表达式再次覆盖它。

最新更新