Сложите данные, если ссылка из другого файла верна - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два файла CSV, которые выглядят так:

test.csv:

"Col1","Col2"
"1111","1"
"1122","2"
"1111","3"
"1121","2"
"1121","2"
"1133","2"
"1133","2"

Второй выглядит так:

test2.csv:

"Number","signs"
"1111","ABC"
"1122","DEF"
"1111","ABC"
"1121","ABC"
"1133","GHI"

Теперь цель состоит в том, чтобы получить сводку всех баллов из test.csv, присвоенных «знакам» test2.csv.Ссылка на цифры, как вы можете видеть.

Должно быть что-то вроде этого:

ABC = 8
DEF = 2
GHI = 4

Я пытался проверить это, но не смог получить цель.Пока что у меня есть:

$var = "C:\PathToCSV"
$csv1 = Import-Csv "$var\test.csv"
$csv2 = Import-Csv "$var\test2.csv"

# Process: group by 'Item' then sum 'Average' for each group
# and create output objects on the fly
$test1 = $csv1 | Group-Object Col1 | ForEach-Object {
    New-Object psobject -Property @{
        Col1 = $_.Name
        Sum = ($_.Group | Measure-Object Col2 -Sum).Sum
    }
}

Но это возвращает меня к следующему выводу:

Ps> $test1

Sum Col1
--- ----
  4 1111
  2 1122
  4 1121
  4 1133

Я не могу получить сводку и отображение знаков.

1 Ответ

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

Не уверен, правильно ли я понимаю ваш вопрос, но я собираюсь предположить, что для каждого значения из столбца «знаки» вы хотите найти значения из столбца «Число» во втором CSV, а затем вычислить суммустолбца "Col2" для всех совпадений.

Для этого я бы построил хеш-таблицу с предварительно вычисленными суммами для уникальных значений из "Col1":

$h1 = @{}
$csv1 | ForEach-Object {
    $h1[$_.Col1] += [int]$_.Col2
}

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

$h2 = @{}
$csv2 | ForEach-Object {
    $h2[$_.signs] += $h1[$_.Number]
}

Однако это привело к тому, что значение "ABC" отличалось от того, которое вы указали в качестве желаемого результата в своем вопросе, когдаЯ обработал ваши выборочные данные:

Name  Value
----  -----
ABC   <i><b>12</b></i>
GHI   4
DEF   2

Или вы хотели суммировать соответствующие значения для уникальных чисел для каждого знака?Для этого вы должны изменить второй фрагмент кода на что-то вроде этого:

$h2 = @{}
$csv2 | Group-Object signs | ForEach-Object {
    $name = $_.Name
    $_.Group | Select-Object -Unique -Expand Number | ForEach-Object {
        $h2[$name] += $h1[$_]
    }
}

Это даст желаемый результат из вашего вопроса:

Name  Value
----  -----
ABC   <i><b>8</b></i>
GHI   4
DEF   2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...