将新生成的散列 table 添加到列值匹配的现有 csv

Add newly generated hash table to existing csv where value of a column match

以下是已回答的 的续集。

原始 CSV 具有以下值:

URL,Groups,contact,number
test1.org,TestGroup,Ax;Bx;Cx,555
test2.org,TestGroup,Ax;Bx;Cx,555
Test3.com,TestGroup,Ax;Bx;Cx,555
Check.com,CheckGroup,Rx;Tx,333
Random.1.com,RandomGroup,Gy;Fy;Hy,999
random.22.org,RandomGroup,Gy;Fy;Hy,999

有人慷慨地帮助提供代码来生成一个散列table,该散列按 Groups 分组,并将每组的所有 URL 设置为一个,用逗号分隔 (,).

代码为:

$data = Import-Csv 'path'
$hashtable = @{}
foreach ($item in $data) {
    $hashtable[$($item.Groups)] += "$($item.URL); "
}

我需要回答两件事:

  1. 如何删除组中最后一个值的分号 (;)?
  2. 如何将这个新散列table恢复为我的原始 CSV?

我认为的逻辑是 Sort -Unique 原始逻辑,并且对于每个与散列 table 相匹配的组名,将散列 table 的值插入 URL 场地。诸如此类。

预期的最终结果应该类似于(已排序):

Groups,URL,contact,number
TestGroup,test1.org;test2.org;Test3.com,Ax;Bx;Cx,555
CheckGroup,Check.com,Rx;Tx,333
RandomGroup,Random.1.com;random.22.org,Gy;Fy;Hy,999

Groups 字段对 $data 进行分组,然后展开每个组的 URL 字段并用分号加入结果数组:

$data | Group-Object Groups | ForEach-Object {
    $hashtable[$_.Name] = @($_.Group | Select-Object -Expand URL) -join ';'
}

然后从原始数据中删除 URL 字段,select 唯一记录,并将分组的 URL 添加回:

$data | Select-Object -Property * -Exclude URL |
    Select-Object -Unique * |
    Select-Object *,@{n='URL';e={$hashtable[$_.Groups]}}