Создайте и разбейте массив вдвое больше всего встроенного в Powershell - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующий код, который работает, но я ищу способ сделать все это встроенным без необходимости создания ненужных переменных $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 голосов
/ 08 февраля 2019

Вы можете передать второй сплит к foreach

$line.split(",") | Select -index 3 | foreach { $_.split("=") | Select -index 1 }
0 голосов
/ 08 февраля 2019

Mudit уже предоставил ответ, вот еще один о вашем конкретном случае.

Трубопровод к foreach и доступ ко 2-му элементу делают свое дело:

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

Как говорится, стремитесь кудобочитаемость и простота обслуживания.Нет ничего плохого в наличии промежуточных переменных.Память дешевая в наше время, время программистов - нет.Оптимизация необходима тогда, когда она необходима, и только после тщательного профилирования, чтобы увидеть, каково на самом деле узкое место.

0 голосов
/ 08 февраля 2019
$line.Split(',')[3].Split('=')[1]
0 голосов
/ 08 февраля 2019

Попробуйте код ниже:

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