#powershell #csv #export-to-csv
#powershell #csv #экспорт в csv
Вопрос:
Привет, я новичок и очень плохо разбираюсь в powershell.
У меня есть 5 CSV-файлов, в каждом из которых есть 1 столбец. Я хочу взять столбец из каждого файла csv и поместить их в новый файл csv, и каждый столбец будет взят из 5 файлов csv в качестве отдельного столбца в новом csv
результат должен быть таким
temp1 | temp2 | temp3 | temp4 | temp5|
может ли кто-нибудь, пожалуйста, помочь мне с этим
Комментарии:
1. Что вы уже пробовали? Пожалуйста, покажите свой код.
2. предполагая, что все они имеют одинаковое количество строк… загрузите файлы в независимые $ Vars, выполните итерацию по одному из них, создайте
PSCustomObject
который имеет prop из каждого $ Var, затем экспортируйте это в CSV-файл.3. Есть ли у какого-либо из этих входных CSV-файлов (или у всех них) заголовок, или это просто списки значений, каждое в новой строке?
Ответ №1:
Это должно сработать. Это данные, разделенные запятыми. Я не мог сказать, хотите ли вы, чтобы разделители канала были основаны на вашем вопросе или это было для демонстрационных целей. Я также не смог определить, была ли временная номенклатура новым значением столбцов, которые вы хотели, или это уже было имя каждого столбца в каждом файле. Предполагается, что в ваших данных нет запятых.
$CSV1 = Get-Content csv1.csv
$CSV2 = Get-Content csv2.csv
$CSV3 = Get-Content csv3.csv
$CSV4 = Get-Content csv4.csv
$CSV5 = Get-Content csv5.csv
$MostRows = ($CSV1.count,$CSV2.count,$CSV3.count,$CSV4.count,$CSV5.count | Sort-Object -Descending)[0]
$Output = For ($i = 0; $i -lt $MostRows; $i ) {
$CSV1[$i],$CSV2[$i],$CSV3[$i],$CSV4[$i],$CSV5[$i] -Join ","
}
$Output | Set-Content NewCSV.csv
Вот альтернатива, которая использует объекты и защищает запятые в данных. При этом для имен столбцов используется ваша временная номенклатура. Это можно вручную настроить на все, что вам нравится, обновив имена в хэш-таблице.
$CSV1 = Get-Content csv1.csv
$CSV2 = Get-Content csv2.csv
$CSV3 = Get-Content csv3.csv
$CSV4 = Get-Content csv4.csv
$CSV5 = Get-Content csv5.csv
$MostRows = ($CSV1.count,$CSV2.count,$CSV3.count,$CSV4.count,$CSV5.count | Sort-Object -Descending)[0]
$Output = For ($i = 0; $i -lt $MostRows; $i ) {
[pscustomobject][ordered]@{"temp1"=$CSV1[$i];"temp2"=$CSV2[$i];"temp3"=$CSV3[$i];"temp4"=$CSV4[$i];"temp5"=$CSV5[$i]}
}
$Output | Export-CSV NewCSV.csv -notypeinformation
Комментарии:
1. Предполагается, что входные CSV-файлы вообще не являются CSV-файлами, а представляют собой списки значений без заголовков CSV. Из вопроса без примеров невозможно сказать, действительно ли это так.
2. @Тео, это правильно. Я чувствую, что для составления идеального решения не хватает некоторой важной информации.