Импортировать данные из одного CSV-файла в другой CSV-файл - как? - PullRequest
0 голосов
/ 17 июня 2020

У меня 2 почти одинаковых файла CSV. CSV1 выглядит так:

Name,Surname,Town,Contry
Ann,Carlson,London,UK
Bert,Anderson,Copenhagen,DK
Gilbert,Norman, Bonn,DE
etc. etc

CSV2 выглядит так:

Town,Contry
London,England
Copenhagen,Denmark
Bonn,Germany
etc. etc.

В файлах точно такое же количество строк, и мне нужно переместить / добавить столбец Contry из CSV2 (Включая данные) в CSV1 или в новый файл CSV.

То, что у меня есть до сих пор:

...
$A=import-csv -path CSV1.csv|Select-object -property Name, SurName, Town
$B=Import-csv -path CSV2.csv|Select-obejct -property Country
...

Затем - Как мне объединить эти 2 переменные и экспортировать их в новый файл?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

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

$csv1 = Import-Csv a.csv
$csv2 = Import-Csv b.csv

foreach ($row in $csv1) {
    $row.Contry = $csv2.where({$_.Town -eq $row.Town},'First').Contry
}

$csv1 | Export-Csv -Path new.csv -NoType

Если каждая строка каждой строки CSV идеально подходит для соответствия Town данных, вы можете использовать индексирование массива каждого файла для обрабатывать изменение быстрее.

$csv1 = Import-Csv a.csv
$csv2 = Import-Csv b.csv

for ($i = 0; $i -lt $csv1.Count; $i++) {
    $csv1[$i].Contry = $csv2[$i].Contry
}

$csv1 | Export-Csv -Path new.csv -NoType
0 голосов
/ 17 июня 2020

Быстрый и грязный метод. Вы можете использовать вложенный l oop, как показано ниже, чтобы получить поля и написать новый файл.

$A=import-csv -path CSV1.csv|Select-object -property Name, SurName, Town
$B=Import-csv -path CSV2.csv|Select-object -property Town, Contry

$resultCsv = @();
$A | ForEach-Object {
    $_person = $_;
    $B | ForEach-Object{
        $_country = $_;
        if($_person.Town -eq $_country.Town){
            Write-Host "$($_person.Name),$($_person.Surname),$($_person.Town),$($_country.Contry)";
            $resultCsv += [pscustomobject] @{"Name"=$_person.Name;"Surname"=$_person.Surname;"Town"=$_person.Town;"Contry"=$_country.Contry}
        }        
    }    
}

$resultCsv | Export-Csv -Path output.csv -NoTypeInformation

Обратите внимание, что в строке $B=Import-Csv ... ive добавлено 2-е поле «Город» - это поле нужно вам для найти совпадение с полем в $A

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