将新生成的哈希表添加到现有csv,其中列的值匹配

时间:2017-03-01 23:09:26

标签: powershell csv powershell-v4.0

以下是获得答案的previous question的连续性。

原始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

有人慷慨地帮助提供代码来生成哈希表,该哈希表按Groups对其进行分组,并将每个组的所有网址设置为以逗号分隔的一个(,)。

代码是:

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

我需要回答两件事:

  1. 如何删除组中最后一个值的分号(;)?
  2. 如何将此新哈希表恢复为原始CSV?
  3. 我认为逻辑是Sort -Unique原始的,并且对于与哈希表匹配的每个组名称,在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

1 个答案:

答案 0 :(得分:1)

$data字段组Groups,然后展开每个组的URL字段,并用分号连接结果数组:

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

然后从原始数据中删除URL字段,选择唯一记录,然后重新添加分组的URL:

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