【问题标题】:Powershell to group items separated by commas as they relate to another value on other columnPowershell 对用逗号分隔的项目进行分组,因为它们与其他列上的另一个值相关
【发布时间】:2017-03-02 02:45:16
【问题描述】:

需要一些有关 powershell 和操作 csv 文件的帮助,因为我是一个正在努力学习的新手。

我有一个包含几列的 .csv 文件,现在让我们将它们称为 A、B、C、D 在“A”列中我有 URL,在“B”列中我有组,C 和 D 对这个例子很重要。

因此,就每列下方单元格中的值而言,显然 URL 的值与组列“B”下的值相关联。

示例 csv:

URL,Groups,x,y
test1.org,TestGroup,xxx,yyy
test2.org,TestGroup,xxx,yyy
Test3.com,TestGroup,xxx,yyy
Check.com,CheckGroup,xxx,yyy
Random.1.com,RandomGroup,xxx,yyy
random.22.org,RandomGroup,xxx,yyy

所以我要做的就是将这些分组,如下所示:

Groups,URL,x,y
TestGroup,"test1.org,test2.org,test3.org",xxx,yyy
CheckGroup,Check.com,xxx,yyy
RandomGroup,"Random.1.com,random.22.org",xxx,yyy

我尝试了以下方法:

$Dir = "FileLocation\Data"
$Data1 = import-csv $Dir\my.csv

$Data = $Data1 | Select Groups, URL | Group-Object Groups 

$Data | export-cdv $Dir\result.csv

这会导致表格对我不起作用,因为它将分组转换为数组。

我希望能够在原始 csv 上按组进行唯一排序,并导入组 URL 的值,因为它们在以逗号分隔的同一单元格中相关。

感谢您的帮助。

【问题讨论】:

    标签: powershell powershell-4.0


    【解决方案1】:

    看起来像一个哈希表魔术的好案例,创建一个哈希表并附加到它,使用组列作为键。

    $data = import-csv 'path'
    $hashtable = @{}
    foreach ($item in $data) { $hashtable[$($item.Groups)] += "$($item.URL), " }
    

    唯一的缺点是每个键的末尾都有一个额外的逗号。

    【讨论】:

    • $a 应该是 $data $b = $hashtable,反之亦然?
    • 所以我假设你提供的是它自己的脚本,而不是我所拥有的脚本的附加......这样,当我运行它时,我会收到每个组的错误消息,说“不能将值“TestGroup”转换为类型“System.Int32”。错误:“输入字符串的格式不正确。”然后显示突出显示 ($item.URL) 的 foreach 行。它对每个组名称行重复此错误。
    • 我不知道你做了什么,我已经将你的 csv 复制粘贴到一个文件中,并且成功了。
    • 我的错,这确实有效!谢谢。我实际使用的 csv 必须有不同的东西。让我看看发生了什么事。
    • 好的,所以我错误地在此示例中的 Groups 与原始 csv 标头中有一个 (s)。所以现在我有了这个新的哈希表,如何将它重新插入到原始 csv 中,以便与每个组相关的列的其余部分也显示出来。我想此时原件需要排序 -Unique。
    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2012-04-14
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多