Powershell Import-CSV: переупорядочить столбцы без заголовков или export-CSV без заголовка - PullRequest
0 голосов
/ 25 октября 2018

У меня есть файл 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

Добавляет новый столбец в качестве третьего столбца.Выполняя поиск в Google, я не мог найти способ переупорядочить столбцы без строки заголовка, поэтому я изменил скрипт следующим образом:

(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

Надеюсь, это имеет больше смысла.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Я бы прочитал Заголовки 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"
0 голосов
/ 25 октября 2018

Я не уверен, что полностью понимаю вопрос, но именно так вы бы добавили новую строку в файл 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"
...