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

时间:2019-02-08 10:39:55

标签: arrays powershell split powershell-v3.0 pipeline

我有以下有效的代码,但我正在寻找一种无需创建不必要的变量$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

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

4 个答案:

答案 0 :(得分:2)

尝试以下代码:

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

穆迪(Mudit)已经提供了答案,这是有关您的特殊情况的另一个答案。

使用管道到logging并访问第二个元素可以达到目的:

foreach
话虽这么说,旨在提高可读性和易于维护。中间变量没有错。如今内存很便宜,程序员的时间却不然。优化是在需要时进行的,只有在仔细分析以查看真正的瓶颈之后,才进行优化。

答案 3 :(得分:0)

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

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