【问题标题】:Powershell hash table compare and appendPowershell 哈希表比较和追加
【发布时间】:2012-09-25 16:36:59
【问题描述】:

我有一个这样的 csv 文件:

userid;memberof
user1;groupid1
user2;groupid3
user1;groupid7
user2;groupid8

我想创建一个像这样的 csv 文件:

user1;groupid1|groupid7
user2;groupid3|groupid8

我在这个论坛上看到,这可以通过哈希表完成,但我无法成功。

我不得不说我是 powershell 新手,所以请原谅这个问题。

【问题讨论】:

  • 欢迎来到 StackOverflow!请告诉我们您已经尝试过什么。您在使用哈希表时遇到了什么?

标签: powershell compare append hashtable


【解决方案1】:

不需要借口,这是一个相当棘手的问题;)

Import-CSV YourFile.txt -Delim ";" | Group-Object userid | 
   Select-Object @{ name="UserId"
                    expr={$_.Name}},
                 @{ name="MemberOf"
                    expr={($_.Group |% { $_.memberof }) -join "|" }} |
   Export-CSV YourNewFile.txt -Delim ";" -NoTypeInformation

注意,这将包括标题行“UserId;MemberOf”,所以如果你真的不想要它,那么你应该安排把它砍掉。

使用 ConvertTo-CSV 代替 Export-CSV,将其分配给变量,然后将其写出如下内容:

 $output = ... | 
    ConvertTo-CSV -Delim ";" -NoTypeInformation 
 Set-Content YourNewFile.txt $output[1..($output.count)]

【讨论】:

    【解决方案2】:
    $original = Import-Csv .\a.csv -Delimiter ';'
    $expression = {[string]::Join('|', ($_.Group | Select -expand memberof))}
    $original | Group-Object userid | Select-Object @{n="userid";e={$_.Name}}, @{n="memberof";e=$expression} | Export-Csv ./b.csv -NoTypeInformation -Delimiter ';'
    

    【讨论】:

    • 我在发布我的帖子后看到了@Jaykul 的回答——我的解决方案并没有太大的不同,但会留作参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多