Как я могу объединить столбцы CSV и переименовать их заголовок с помощью Powershell? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь объединить два файла CSV вместе и выбрать только два из их столбцов для использования в новом CSV.Я не понимаю, почему я не могу использовать код, который у меня уже есть:

$Temp1 = (Import-csv "C:\path\APPcsv.csv" -header "APP") | 
    select-object APP
$Temp2 = (Import-csv "C:\path\ALLdb42APPs.csv"-header "NA1", "NA2", "Applications", "NA3", "Project") | 
    select-object Project

$CSV= @($temp1, $temp2) | 
    export-csv -path "C:\path\Why isn't this working.csv" -noTypeInformation

Вот пример строки из каждого CSV:

CSV1 (ALLdb42APPs.csv)

"Current Application","Calculation","AdobeReaderDC-18.011.20036 V1 - Add  Instalation Status: SUCCESSFUL","2018-05-16 08:54:17","DK ATM error main"

CSV2 (APPcsv.csv)

"DameWareService-10.0.0.0-x64 V2 - Add"

1 Ответ

0 голосов
/ 30 мая 2018

Итак, ваша проблема в том, что @($temp1,$temp2) не объединяет первый элемент $temp1 с первым элементом $temp2, а вместо этого создает новую коллекцию, которая состоит из всех объектов $temp1, за которыми следуют все$temp2.

Поскольку $temp1 - это объекты со свойством APP, а $temp2 - это объекты с Project, объединять их в коллекцию не имеет смысла для экспорта в CSV.,

Если $temp1 - это мешок с яблоками, а $temp2 - это мешок с апельсинами, @($temp1,$temp2) не скрепляет мешки, а сбрасывает их в один мешок друг на друга.

Вы можете объединить два объекта в один.У Уоррена Фрейма есть уважаемый модуль Join-Object , который можно использовать, как указал Джеймс С., но вашим двум csvs потребуется совместно использовать столбец.

Другой альтернативой является использование цикла for, затем в каждой итерации берется значение из каждой коллекции и создается новый объект с обоими значениями.

$Temp1 = (Import-csv "C:\path\APPcsv.csv" -header "APP") | 
    Select-Object -ExpandProperty APP
$Temp2 = (Import-csv "C:\path\ALLdb42APPs.csv"-header "NA1", "NA2", "Applications", "NA3", "Project") | 
    Select-Object -ExpandProperty Project

$LargestIndex = [math]::Max($temp1.count,$temp2.count)

$CombinedArray = For ($i=0; $i -le $LargestIndex; $i++) {
    [pscustomobject]@{
        APP = $temp1[$i]
        Project = $temp2[$i]
    }
}

$CombinedArray | 
    Export-Csv -Path "C:\path\Example.csv" -NoTypeInformation

Примечание: требуется PowerShell 3+для pscustomobject способ создания объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...