我有以下的代码工作,但我正在寻找一种方式来做到这一切在线,而无需创建不必要的变量$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
错误消息:表达式仅被允许作为管道的第一个元素。
$line.Split(',')[3].Split('=')[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
话虽这么说,目的是为可读性和易于维护。有没有错,有中间变量。内存目前很便宜,程序员的时间是没有的。当需要这种耐心,然后才经过仔细分析,看看有什么实际的瓶颈,优化的原因。
你可以管第二裂到一个foreach
$line.split(",") | Select -index 3 | foreach { $_.split("=") | Select -index 1 }