Объединение 2 CSV-файлов с Powershell с помощью Import-Excel - PullRequest
1 голос
/ 12 марта 2020

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

Файл A

Column 1 = ID
Column 2 = Text
Column 3 = other Text

Файл B

Column 1 = ID
Column 2 = some other text

Я хочу объединить их сейчас, используя powershell и модуль "import-excel" чтобы получить один новый CSV:

Файл C

Column 1 = ID
Column 2 = Text
Column 3 = other text
Column 4 = some other text

1 Ответ

0 голосов
/ 12 марта 2020

Существует несколько способов связать 2 (или более) набора данных, но, вероятно, наиболее распространенным в PowerShell является поиск общего и уникального свойства и использование таблиц ha sh для связи одного с другим.

Если у вас есть модуль ImportExcel; Вот простой пример, основанный на несколько ограниченной информации, которую вы предоставили:

Я создал:

FileA:
ID   Text1          Tex2
1    something1.1   something2.1
2    something2.1   something2.2

FileB:
ID   Text3
1    SoemthingElse
2    SomethingElse2
$FileA      = 'c:\temp\fileA.csv'
$FileB      = 'c:\temp\fileB.csv'
$MergeFile  = 'c:\temp\FileA_BMerged.xlsx'
$FileB_Hash = @{}

# Create a hash table from the data in FileB indexed on the ID column.
Import-Csv -Path $FileB |
ForEach-Object{ $FileB_Hash.Add( $_.ID, $_) }

# Now Import FileA via Import-Csv and correlate the data using the ID to tie the 
# 2 sets together.
#
# Notice the use of Select-Object with a calculated property.
Import-Csv -Path C:\temp\FileA.csv |
Select-Object *,@{Name = 'Text3'; Expression = { $FileB_Hash.($_.ID).Text3 } } |
Export-Excel -Path $MergeFile

Export-Excel - последняя и наименее неясная часть, которая просто берет созданные объекты ранее на этапах конвейера и вывода их на лист Excel.

Вы должны быть чувствительны к именам полей. Убедитесь, что ваши ключи уникальны, иначе вам придется обращаться с ними по-другому. Основной принцип c - когда вы сталкиваетесь с идентификатором в первой коллекции, вы можете использовать его для простой ссылки на объект во втором наборе, а затем использовать эти данные для расширения данных в первом.

Мы можем смешивать это по-разному, в том числе не использовать либо установить в качестве основы и просто создать коллекцию PSCustomObjects. Однако основной принцип должен быть похожим.

Пожалуйста, попробуйте и дайте мне знать, как это происходит.

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