извлечение трехзначного числа всегда в одной и той же позиции из определенных строк в файле журнала - PullRequest
0 голосов
/ 08 октября 2018

Я нашел скрипт powershell, чтобы найти каждую строку, содержащую «образец строки», но каждая строка, в которой есть нужная строка, также имеет трехзначное число.Меня интересует только число, и оно всегда находится в одной и той же позиции в строках, которые я нахожу с помощью сценария powershell.Поэтому мне действительно нужен скрипт, который находит строки с «образцом строки», затем извлекает из строки char xy и выводит их в файл.

07.10.2018 20:48:36 Total speed: 599 Sol/s
07.10.2018 20:49:06 Total speed: 601 Sol/s
07.10.2018 20:49:36 Total speed: 600 Sol/s

Я получаю вышеуказанный вывод стекущий скрипт.Я хотел бы только получить номер

, используя следующий код:

$InStuff = gc -path Z:\logfile.log | select-object -Last 5
-split [environment]::NewLine

foreach ($IS_Item in $InStuff) {
    $IS_Item.Split(' ')[-2]

    $Null = $IS_Item -match 'speed: (?<Speed>\d+) Sol'
    $Matches.Speed
    ''
}

, и я получаю следующие результаты:

54C
598

Sol/s
598

598
598

[A:124,
598

[A:97,
598

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Спасибо @Lee_Dailey за сценарий.Я немного его отредактировал и получаю именно тот результат, который искал:

$InStuff = sls -path Z:\logfile.log -pattern "Total speed" | select-object -Last 5

foreach ($IS_Item in $InStuff) {
    $Null = $IS_Item -match 'speed: (?<Speed>\d+) Sol'
    $Matches.Speed
}
0 голосов
/ 08 октября 2018

это показывает два способа получить число «Общая скорость» из строк образца.без вашего кода вам нужно будет выяснить, кто заставит его работать в вашей настройке.[ ухмылка ]

# fake reading in a text file
#    in real life, use Get-Content
$InStuff = @'
07.10.2018 20:48:36 Total speed: 599 Sol/s
07.10.2018 20:49:06 Total speed: 601 Sol/s
07.10.2018 20:49:36 Total speed: 600 Sol/s
'@ -split [environment]::NewLine

foreach ($IS_Item in $InStuff)
    {
    # split on the space, then take the 2nd from the end
    $IS_Item.Split(' ')[-2]

    # capture the numbers after "speed: " and before " Sol"
    #    store them in a named group = "Speed"
    #    get the group from the $Matches automatic variable
    $Null = $IS_Item -match 'speed: (?<Speed>\d+) Sol'
    $Matches.Speed
    ''
    }

обе темы дают 599, 601, 600 числа, содержащиеся в ваших образцах.

надежда, которая помогает,
ли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...