【问题标题】:Powershell Import-CSV: either reorder columns with no headers or export-CSV with no headerPowershell Import-CSV:重新排序没有标题的列或没有标题的导出CSV
【发布时间】:2019-03-30 02:26:46
【问题描述】:

我有一个没有标题的 CSV 文件,我需要在第一列和第二列之间添加一列。我最终想将没有标题的文件导出到相同的文件名(因此我使用 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

这会将新列添加为第三列。在进行谷歌搜索时,如果没有标题行,我找不到对列重新排序的方法,因此我将脚本修改如下:

(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

这会将列按正确的顺序排列,但现在我想导出没有添加标题行的 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

希望这更有意义。

【问题讨论】:

    标签: powershell csv powershell-3.0


    【解决方案1】:

    我会阅读标题 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"
    

    【讨论】:

    • 这看起来很接近我正在寻找的东西。我能否将其写入与导入时相同的 csv 文件名?
    • 是的,因为最初的 Import-csv 括在括号中,所以它被读入,您可以在同一管道中重复使用文件名。
    • 我在某处遗漏了一些东西,因为即使它插入了第二列,它也会删除第三列。它在 Select-Object 行中做了一些时髦的事情,因为如果我在那之后立即输出文件,H3 列就消失了。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多