как прочитать конкретную строку и сохранить значение в таблице с помощью powershell - PullRequest
0 голосов
/ 07 мая 2018

У меня ниже формат txt file.which огромного файла.

есть ли способ, которым мы можем прочитать его, используя PowerShell и сохранить ID, test, test1 значение в таблице?

Текстфайл:

----------------------------------------------------------------
ID : 1927
----------------------------------------------------------------


----------------------------------------------------------------
Mode="calculated"
----------------------------------------------------------------
Score test: 0.0403942318, test1 : 0.040394231826281
path: , path1: \\xyz\cbd

----------------------------------------------------------------
ID: 4653
----------------------------------------------------------------


----------------------------------------------------------------
Mode="calculated"
----------------------------------------------------------------


Score test: 0.003569656, test1 : 0.00356965601405712
path: , path1: \\xyz\cbd


----------------------------------------------------------------
ID: 5419

-------------------------

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Я люблю именованные группы захвата:

## Q:\Test\2018\05\07\SO_50212799.ps1
$InputFile = '.\file.txt'
$NewTable = Get-Content $inputFile | ForEach-Object {
    if ($_ -match '^ID[: ]+(?<ID>\d+)') { $ID = $Matches.ID }
    if ($_ -match 'test[: ]+(?<Test>[0-9\.]+).*?test1[: ]+(?<Test1>[0-9\.]+)') {
      [pscustomobject]@{
        'ID'    = $ID
        'test'  = $Matches.Test
        'test1' = $Matches.test1
      }
    }
}

$NewTable

Пример вывода

> Q:\Test\2018\05\07\SO_50212799.ps1

ID   test         test1
--   ----         -----
1927 0.0403942318 0.040394231826281
4653 0.003569656  0.00356965601405712
0 голосов
/ 07 мая 2018

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

Get-Content $inputFile | ForEach-Object {
    # do stuff here
}

Использование регулярного выражения для сопоставления строк идентификатора и извлечения идентификатора:

if ($_ -match '^ID : (\d+)$') {
    $id = $matches[1]
    # ...
} else {
    # processing of non-ID lines goes here
}

Обработка записи должна начинаться при обнаружении строки идентификатораи должен заканчиваться, когда вы встречаете следующую строку идентификатора или конец файла.

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