使用Powershell重新组合相同数组中的公共项值



请我需要帮助在PowerShell使用数组做到这一点。下面有一个类似$a的数组:

$a = @('**ABC**:XYZ','**LMN**:PQR','**ABC**:RST','YJQ:PRS','**LMN**:SDK')

我想将$a数组更改为$b:

$b = @('**ABC**:XYZ,RST','**LMN**:PQR,SDK','YJQ:PRS')

这个想法是所有在":"之前具有相同值的项应该以类似于"common_value:x,y,z"但那些没有共同价值观的国家就不应该管了。如有任何提示或解决方案,我将不胜感激。

一个简单的例子:

    $a = @('**ABC**:XYZ','**LMN**:PQR','**ABC**:RST','YJQ:PRS','**LMN**:SDK')
    
    $b=
    $a | 
    Select-ObJect @{Name = 'Name'; Expression = { $_.Split(':')[0]  }},
    @{Name = 'Group'; Expression = { $_.Split(':')[1] }} |
    Group-Object -Property Name |
    ForEach-Object{ "'$($_.Name):$($_.Group.Group -join ',')'"}
    
    $b = $b -join ','
    
    $b
输出:

'**ABC**:XYZ,RST','**LMN**:PQR,SDK','YJQ:PRS'

    $a = @('**ABC**:XYZ','**LMN**:PQR','**ABC**:RST','YJQ:PRS','**LMN**:SDK')
    
    $b =
    $a | Group-Object {$_.Split(':')[0]} |
    ForEach-Object{
        "'$($_.Name):$(($_.Group.Split(':') | Group-Object { $Global:i % 2; $Global:i++ })[1].Group -join ',')'"
    }
    
    $b = $b -join ','
    $b
$b = $a | ConvertFrom-String -Delimiter ':' | 
     Group-Object P1 | 
     ForEach-Object { "$($_.name):$($_.group.P2 -join ',')" }
  • ConvertFrom-String在':'处分割每个输入字符串,为':'之前和之后的部分创建一个具有P1P2属性的对象
  • Group-Object按':'前的部分分组
  • 使用ForEach-Object,我们从':'之前的部分与':'之后的部分构建结果字符串

最新更新