在 Powershell 中内联创建和拆分数组两次

Create and split an array twice all inline in Powershell

我有以下有效的代码,但我正在寻找一种方法来完成所有内联操作,而无需创建不必要的变量 $myArray1$myArray2:

$line = "20190208 10:05:00,Source,Severity,deadlock victim=process0a123b4";
$myArray1 = $line.split(",");
$myArray2 = $myArray1[3].split("=");
$requiredValue = $myArray2[1];

所以我有一个字符串 $line 我想要:

  1. 用逗号分割成一个数组。
  2. 取新数组的第四项[3]
  3. 用等号将其拆分到另一个数组中
  4. 取这个数组的第二项[1]
  5. 并将字符串值存储在变量中。

我试过使用 Select -index,但我无法将结果通过管道传输并再次拆分。

以下作品:

$line.split(",") | Select -index 3 

但是,下面的操作会导致错误:

$line.split(",") | Select -index 3 | $_.split("=") | Select -index 1

错误消息:表达式只允许作为管道的第一个元素。

试试下面的代码:

$requiredValue = "20190208 10:05:00,Source,Severity,deadlock victim=process0a123b4" -split "," -split "=" | select -Last 1

Mu​​dit 已经提供了一个答案,这里有另一个关于你的具体案例的答案。

通过管道连接到 foreach 并访问第二个元素就可以了:

$line.split(",") | Select -index 3  | % {$_.split("=")[1]}
process0a123b4

也就是说,目标是可读性和易于维护。有中间变量没有错。现在内存很便宜,程序员的时间却不便宜。优化是在需要时进行,只有在仔细分析以查看实际瓶颈是什么之后。

$line.Split(',')[3].Split('=')[1]

您可以将第二个拆分通过管道传递给 foreach

$line.split(",") | Select -index 3 | foreach { $_.split("=") | Select -index 1 }