Powershell Import-CSV:重新排序没有 header 的列或 export-CSV 没有 header
Powershell Import-CSV: either reorder columns with no headers or export-CSV with no header
我有一个没有 header 的 CSV 文件,我需要在其中的第一列和第二列之间添加一列。我最终想将没有 header 的文件导出到相同的文件名(因此我使用 Import-CSV 与 Get-Content)。
这是将新列添加到现有文件的脚本:
(Import-CSV U:\To_Delete\Layer_search\WB_layers-mod.csv) |
Select-Object *,@{Expression={'FALSE'}} |
Export-Csv U:\To_Delete\Layer_search\WB_layers-mod.csv -NoTypeInformation
这会将新列添加为第三列。在进行谷歌搜索时,我发现没有 header 行就无法对列进行重新排序,因此我按如下方式修改了脚本:
(Import-CSV U:\To_Delete\Layer_search\WB_layers-mod.csv -header H1, H2)|
Select-Object *,@{Name='H3';Expression={'FALSE'}} |
Select-Object -Property H1, H3, H2 |
Export-Csv U:\To_Delete\Layer_search\WB_layers-mod.csv -NoTypeInformation
这使列的顺序正确,但现在我想导出没有添加的 header 行的 CSV。但是,我发现的唯一建议是使用 Get-Content、Convert-to-CSV 和使用 Skip 1。这对我不起作用,因为我只有 运行 PS3并且该选项在 PS5 之前不可用,我想保存回原始文件名,这在 Get-Content.
中是做不到的
我可能使这比它需要的要困难得多,但我将不胜感激任何建议。
谢谢!
编辑添加:
为了清楚起见,这里是我正在导入的 CSV 文件的示例:
abc,1/1/2012
def,1/2/2012
ghi,1/3/2012
我想在第一列和第二列之间添加一列:
abc,FALSE,1/1/2012
def,FALSE,1/2/2012
ghi,TRUE,1/3/2012
希望这更有意义。
我会阅读 Headers H1、H3 并计算 H2 以直接按正确的顺序排列它们。
(Import-CSV .\sample.csv -header H1, H3)|
Select-Object H1,@{Name='H2';Expression={'FALSE'}},H3 |
ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Set-Content New.csv
示例输出
"abc","FALSE","1/1/2012"
"def","FALSE","1/2/2012"
"ghi","FALSE","1/3/2012"
我有一个没有 header 的 CSV 文件,我需要在其中的第一列和第二列之间添加一列。我最终想将没有 header 的文件导出到相同的文件名(因此我使用 Import-CSV 与 Get-Content)。
这是将新列添加到现有文件的脚本:
(Import-CSV U:\To_Delete\Layer_search\WB_layers-mod.csv) |
Select-Object *,@{Expression={'FALSE'}} |
Export-Csv U:\To_Delete\Layer_search\WB_layers-mod.csv -NoTypeInformation
这会将新列添加为第三列。在进行谷歌搜索时,我发现没有 header 行就无法对列进行重新排序,因此我按如下方式修改了脚本:
(Import-CSV U:\To_Delete\Layer_search\WB_layers-mod.csv -header H1, H2)|
Select-Object *,@{Name='H3';Expression={'FALSE'}} |
Select-Object -Property H1, H3, H2 |
Export-Csv U:\To_Delete\Layer_search\WB_layers-mod.csv -NoTypeInformation
这使列的顺序正确,但现在我想导出没有添加的 header 行的 CSV。但是,我发现的唯一建议是使用 Get-Content、Convert-to-CSV 和使用 Skip 1。这对我不起作用,因为我只有 运行 PS3并且该选项在 PS5 之前不可用,我想保存回原始文件名,这在 Get-Content.
中是做不到的我可能使这比它需要的要困难得多,但我将不胜感激任何建议。
谢谢!
编辑添加:
为了清楚起见,这里是我正在导入的 CSV 文件的示例:
abc,1/1/2012
def,1/2/2012
ghi,1/3/2012
我想在第一列和第二列之间添加一列:
abc,FALSE,1/1/2012
def,FALSE,1/2/2012
ghi,TRUE,1/3/2012
希望这更有意义。
我会阅读 Headers H1、H3 并计算 H2 以直接按正确的顺序排列它们。
(Import-CSV .\sample.csv -header H1, H3)|
Select-Object H1,@{Name='H2';Expression={'FALSE'}},H3 |
ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Set-Content New.csv
示例输出
"abc","FALSE","1/1/2012"
"def","FALSE","1/2/2012"
"ghi","FALSE","1/3/2012"