Powershell按ID随机分组

我需要根据两个对象可能共享的ID对随机检索的对象进行分组。

这是我当前的脚本:

$allRows = Import-CSV C:\Temp\pk.csv

$chosenHouseholdIDs = ($allRows | Get-Random -Count $allRows.count).id

$chosenOnes = $allRows | Where-Object id -in $chosenHouseholdIDs

$i = 1

foreach ($chosenOne in $chosenOnes)
{
     "$($i),$($chosenOne.name)"
     $i = $i + 1
}

文件pk.csv包含130行。每行都有一个名称和一个householdID。 HouseholdID的目的是链接双胞胎。因此,如果一个双胞胎被随机牵拉,那么另一对双胞胎则需要下一个牵拉,或者需要将它们组合在一起。

样本输入如下:

householdID,name
7745,Josiah Moon
7746,Finleigh Hayes
7747,Evelyn Brandon
7749,Braedyn Thompson
7750,William Doughty
7751,Madison Vaughn
7751,Morgan Vaughn
7752,Peyton Benford
7753,Robert Waldrop
7754,Johnathan Ford
7755,Cheyenne Holmes
7756,Reid Ruark

预期的输出将是这样的:

rowNumber,householdID,name
1,7750,William Doughty
2,7752,Peyton Benford
3,7753,Robert Waldrop
4,7755,Cheyenne Holmes
5,7747,Evelyn Brandon
6,7745,Josiah Moon
7,7746,Finleigh Hayes
8,7756,Reid Ruark
9,7751,Morgan Vaughn
10,Madison Vaughn
11,7754,Johnathan Ford
12,7749,Braedyn Thompson

请注意,householdID为7751的两个名称以随机顺序列出,但在列表中顺序排列。 HouseholdID不必是输出的一部分。我只是将其包括在此处以用于说明目的。

pking11 回答:Powershell按ID随机分组

如果在将相同的家庭ID组合在一起的同时更改项目的顺序是可以接受的,则可以执行以下操作(为简便起见,我省略了输出格式代码):

$chosenOnes | Group-Object householdID | ForEach-Object Group 

这将执行所需的分组,但将返回按家庭ID排序的项目。

.Group cmdlet输出的Microsoft.PowerShell.Commands.GroupInfo实例的Group-Object属性包含每个组的成员,仅输出每个组的成员将导致输入项的平面排列,但是进行分组。


如果再次随机排序 是可以接受的,请使用:

$chosenOnes | Group-Object householdID | 
  Get-Random -Count $chosenOnes.Count | ForEach-Object Group

如果您想保留原始订单,并且仅在首次出现后插入具有相同家庭ID的商品,则需要做更多的工作。

,

使用Group-Object cmdlet。像这样

$chosenOnes = $allRows | Where-Object id -in $chosenHouseholdIDs | Group-Object -Property householdID
本文链接:https://www.f2er.com/3148970.html

大家都在问