Создание и сравнение хеш-таблиц в Powershell - PullRequest
0 голосов
/ 03 октября 2019

Я ищу функцию для сравнения двух CSV, отформатированных следующим образом:

a.csv

x1|y1
x2|y2
x3|y3

b.csv

x2
x3
x4

xзначения в этом csv будут точно такими же, как и значения x в a.csv

Чего я хотел бы добиться, так это когда цикл for запускается, когда ключ из b.csv совпадает сключ ve файла a.csv, он выведет ключ b и соответствующее ему значение:

x2|y2 
x3|y3
x4| "no match"

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

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

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 октября 2019

вам нужно будет решить, будут ли заголовки в ваших CSV-файлах. Существуют способы обработки «иногда», но это другая проблема, которая должна быть решена в источнике. [ ухмылка ]

проверяет каждый элемент из второго файла на предмет всех элементов из первого файла. если совпадение найдено, используются значения из 1-го файла. если совпадений нет, используется значение из 2-го файла, а 2-й столбец заполняется текстовым сообщением «не найдено».

# fake reading in a CSV file
#    in real life, use Import-CSV
$OneInStuff = @'
x1, y1
x2, y2
x3, y3
'@ | ConvertFrom-Csv -Header 'OneX', 'OneY'

# fake reading in a 2nd CSV file
$TwoInStuff = @'
x2
x3
x4
'@ | ConvertFrom-Csv -Header 'Twox'

$NotInTwo = '_Not In Two_'

$ThreeStuff = foreach ($TIS_Item in $TwoInStuff)
    {
    $X_InBoth = $OneInStuff -match $TIS_Item.Twox
    if ($X_InBoth)
        {
        [PSCustomObject]@{
            ThreeX = $X_InBoth.OneX
            ThreeY = $X_InBoth.OneY
            }
        }
        else
        {
        [PSCustomObject]@{
            ThreeX = $TIS_Item.Twox
            ThreeY = $NotInTwo
            }
        }
    }

$ThreeStuff

вывод ...

ThreeX ThreeY      
------ ------      
x2     y2          
x3     y3          
x4     _Not In Two_
...