2017-05-24 37 views
-2

,如果我有兩個陣列和地區列沒有相同的價值觀 像如何組數據來自兩個數組,並獲得數

$數據1 =

Region    Type 
    ------   ----------- 
    EuropeWest   Operational 
    EuropeWest   Operational 
    EuropeWest   Operational 
    EuropeNorth  Operational 
    USCentral   Operational 
    USCentral   Operational 
    AsiaEast   Operational 
    AsiaEast   Operational 
    AsiaEast   Operational 

$數據2 =

Region    Type 
------    ----------- 
EuropeWest   MigrateSource 
EuropeWest   MigrateSource 
EuropeNorth  MigrateSource 
USCentral   MigrateSource 
USEast    MigrateSource 

輸出應該如下:

Region    Operational  MigrateSource 
    ------    -----------  ----------- 
    EuropeWest   4    2 
    EuropeNorth   1    1 
    USCentral   2    0 
    AsiaEast   3    1 
    Useast    0    1 

任何幫助非常感謝?

我能集團,但did'nt得到任何線索如何在這裏使用foreach循環:

$data1 | group -Property region | select name,@{n='Operationaclcount';e={$_.count}} 
$data2 | group -Property region | select name,@{n='Migratesourcecountt';e={$_.count}} 
+1

您能否展示一下您迄今爲止嘗試過的[mcve]?你在哪裏遇到問題?起始點將是'Group-Object'和'ForEach'循環 – BenH

+0

我可以將它分組 ,但沒有得到任何線索如何在這裏使用foreach循環 $ data1 |組 - 屬性區域|選擇姓名,@ {n ='Operationaclount'; e = {$ _。count}} $ data2 |組 - 屬性區域|選擇名稱,@ {n ='Migratesourcecountt'; e = {$ _。count}} –

回答

0

如果你想兩個陣列組合只使用一個加號。事情是這樣的:

$data1 + $data2 | Group-Object region | % { 
    New-Object psobject -property @{ 
    Name = $_.Name 
    Operational = $_.Count 
    MigrateSource = @($_.Group | Select Type -Unique).Count 
    } 
} 
+0

如何在同一個對象中獲得migratesource計數? –

+0

修正了MigrateSource的答案。不知道你如何在你的例子中得到USCentral = 0。 –

0

既然你有一個屬性name兩個對象,如果我們結合這些結合在一起,我們有名稱的完整列表。使用ForEach循環,我們將遍歷這些名稱,並使用Where-Object來篩選爲計數創建的兩個對象中的每一個。然後,我們將使用[pscustomobject]創建一個新對象。最後一個快速測試,如果組中缺少一個名字,表示計數爲零。

$OpCount = $data1 | 
    Group-Object -Property region | 
    Select-Object name,@{n='Operationalcount';e={$_.count}} 
$MigCount = $data2 | 
    Group-Object -Property region | 
    Select-Object name,@{n='Migratesourcecount';e={$_.count}} 
$CombinedNames = $OpCount.name + $MigCount.name 
Foreach ($Name in $CombinedNames) { 
    $entry = [pscustomobject]@{ 
     Operational = $OpCount | 
      Where-Object {$_.name -eq $Name} | 
      Select-Object -Expand Count 
     MigrateSource = $MigCount | 
      Where-Object {$_.name -eq $Name} | 
      Select-Object -Expand Count 
    } 
    if ($entry.Operational -eq $null) { $entry.Operational = 0 } 
    if ($entry.MigrateSource -eq $null) { $entry.MigrateSource = 0 } 
    $entry 
} 
相關問題