我有一个没有标题的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
希望这更有意义。
答案 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"