Powershell -如何转置数组

w41d8nur  于 2022-12-23  发布在  Shell
关注(0)|答案(2)|浏览(142)

我有一个数组,数据用逗号分隔。我需要转置它,这样每行逗号前的第一部分用分隔符连接在一起,成为一行,第二部分也是这样。例如:

AC-2.22,CCI-000012
AC-5.1,CCI-000036
AC-5.3,CCI-001380

我想有两个独立的变量,如下所示:

variable 1 = AC-2.22; AC-5.1; AC-5.3
Variable 2 = CCI-000012; CCI-000036; CCI-001380

我知道这应该很简单,但是我已经盯着代码看了一整天了,我只想去吃晚饭,然后睡觉。
先谢了

rqqzpn5f

rqqzpn5f1#

根据**Santiago Squarzon**中有用答案的$array,您还可以使用ConvertFrom-Csv cmdlet通过member-access enumeration转置数据:

$data = ConvertFrom-Csv $Array -Header var1, var2
$data.var1 -Join ';'
AC-2.22;AC-5.1;AC-5.3
$data.var2 -Join ';'
CCI-000012;CCI-000036;CCI-001380
nimxete2

nimxete22#

使用.Where方法和Split模式并不难:

$array = @(
    'AC-2.22,CCI-000012'
    'AC-5.1,CCI-000036'
    'AC-5.3,CCI-001380'
)

$i = $false
$var1, $var2 = $array.Split(',').Where({ ($i = -not $i) }, 'Split')
$var1 -join '; '
$var2 -join '; '

由于Member-Access Enumeration.Split method可以在这种情况下工作,因为数组没有.Split方法,对数组的每个元素调用相同的方法:
对任何对象使用成员访问运算符,并且该对象上存在指定的成员时,将调用该成员。对于属性成员,运算符返回该属性的值。对于方法成员,运算符调用对象上的该方法。
对不具有指定成员的列表集合对象使用成员访问运算符时,PowerShell会自动枚举该集合中的项,并对每个枚举项使用成员访问运算符。

相关问题