在 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
我想要:
- 用逗号分割成一个数组。
- 取新数组的第四项
[3]
- 用等号将其拆分到另一个数组中
- 取这个数组的第二项
[1]
- 并将字符串值存储在变量中。
我试过使用 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
Mudit 已经提供了一个答案,这里有另一个关于你的具体案例的答案。
通过管道连接到 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 }
我有以下有效的代码,但我正在寻找一种方法来完成所有内联操作,而无需创建不必要的变量 $myArray1
和 $myArray2
:
$line = "20190208 10:05:00,Source,Severity,deadlock victim=process0a123b4";
$myArray1 = $line.split(",");
$myArray2 = $myArray1[3].split("=");
$requiredValue = $myArray2[1];
所以我有一个字符串 $line
我想要:
- 用逗号分割成一个数组。
- 取新数组的第四项
[3]
- 用等号将其拆分到另一个数组中
- 取这个数组的第二项
[1]
- 并将字符串值存储在变量中。
我试过使用 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
Mudit 已经提供了一个答案,这里有另一个关于你的具体案例的答案。
通过管道连接到 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 }