Как объединить два CSV-файла, сохранив повторное имя столбца в Powershell - PullRequest
1 голос
/ 04 мая 2020

У меня есть "a.csv" и "b.csv". Я попытался объединить их с помощью приведенных ниже команд

cd c:/users/mine/test 
Get-Content   a.csv, b.csv |  Select-Object -Unique | Set-Content -Encoding ASCII joined.csv

Но я получил выходной файл, например b.csv, добавленный в конец строки a.csv. Я хотел добавить к концу столбца a.csv, после чего должны начаться столбцы b.csv. Примечание: - Я не могу установить модуль Join-Object на моем сервере.

Vm     Resource    SID
mnvb    vclkn     vxjcb
vjc.v   vnxc,m    bvkxncb

Vm      123     456     789
b      apple    banana  orange 
v      lemon    onion   tomato

Мой ожидаемый результат должен быть таким, как показано ниже. Без изменения порядка и сохранения имени столбца Vm без перезаписи

Vm     Resource    SID   Vm   123      456  789
mnvb    vclkn   vxjcb    b   apple    banana  orange 
vjc.v   vnxc,m  bvkxncb  v   lemon    onion   tomato

1 Ответ

1 голос
/ 05 мая 2020

Этот Join-Object основан на сценарии , а не модуле , это означает, что вы можете сначала «установить» (загрузить) его на другой компьютер и это просто скопировать / вставить его (или содержимое) на ваш сервер. Вы также можете скачать его с сайта проекта и dot-source скрипт: . .\Join-Object.ps1.
См. Также: В Powershell, какой лучший способ присоединиться две таблицы в одну? .

Specifi c на ваш вопрос:
Как прокомментировал @Theo « Дублирующие имена столбцов - это плохо в csv », особенно в PowerShell, где ConvertFrom-Csv Командлет вызовет ошибку в таком CSV-файле.
Скрипт Join-Object имеет возможность присоединить объект на основе индекса строки, просто пропустив параметр -On. В этом случае он будет помещать столбцы, которые существуют с обеих сторон в массиве по умолчанию:

Import-Csv a.csv | Join-Object (Import-Csv b.csv) | Format-Table

Vm         Resource SID     123   456    789
--         -------- ---     ---   ---    ---
{mnvb, b}  vclkn    vxjcb   apple banana orange
{vjc.v, v} vnxc,m   bvkxncb lemon onion  tomato

Используя параметр -Discern, Join-Object разбивает повторяющиеся значения на два столбца, используя значения различения как префиксы:

Import-Csv a.csv | Join-Object (Import-Csv b.csv) -Discern a,b | Format-Table

aVm   Resource SID     bVm 123   456    789
---   -------- ---     --- ---   ---    ---
mnvb  vclkn    vxjcb   b   apple banana orange
vjc.v vnxc,m   bvkxncb v   lemon onion  tomato
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...