Powershell导入CSV:无标题的列重新排序或无标题的导出CSV

时间:2018-10-25 12:58:14

标签: powershell csv powershell-v3.0

我有一个没有标题的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文件。但是,我发现的唯一建议是使用“获取内容”,“转换为CSV”并使用“跳过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

希望这更有意义。

2 个答案:

答案 0 :(得分:3)

我将读取标题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"

答案 1 :(得分:0)

我不确定我是否完全理解这个问题,但这是您将如何在CSV文件中添加新行的方法:

我的测试.csv的内容:

ColumnA ColumnB ColumnC
------- ------- -------
a1      b1      c1     
a2      b2      c2 

脚本:

$MyCSV = Import-Csv C:\stackoverflow\stackoverflow.csv
$NewCsv = @{
    "ColumnA" = $MyCSV.ColumnA
    "ColumnB" = $MyCSV.ColumnB
    "NEWCOLUMN" = "new data"
    "ColumnC" = $MyCSV.ColumnC
}

Export-Csv -InputObject $NewCsv -Path "C:\somepath\wb_layers-mod-new.csv" -NoTypeInformation
$NewCsvContent = Import-Csv "C:\somepath\wb_layers-mod-new.csv"