Это сделает необходимое:
$string = "positives`": *([5-9]|\d\d+)"
$fileread = "Y:\testttt.txt"
Select-String -Path $fileread -Pattern $string -Context 0,2 | % { $_.line + $_.Context.PostContext }
Пример результатов:
"positives": 5, "total": 71, "sha256": "6d371555e08ba2b2397fd44a0db31605e7def831585c4c11dbb21c70d89e3b35"
"positives": 14, "total": 70, "sha256": "c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83"
"positives": 1964, "total": 70, "sha256": "c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83"
Используемый тестовый файл:
"date": "2019-05-13 17:14:10",
"positives": 4,
"total": 72,
"sha256":"7b4aceaadd78ec496c6fd9a284d7411c5085f4efd156e7fe2bac0df872a01034"
"date": "2019-05-13 17:14:10",
"positives": 5,
"total": 71,
"sha256": "6d371555e08ba2b2397fd44a0db31605e7def831585c4c11dbb21c70d89e3b35"
"date": "2019-05-13 17:14:10",
"positives": 4,
"total": 72,
"sha256":"7b4aceaadd78ec496c6fd9a284d7411c5085f4efd156e7fe2bac0df872a01034"
"date": "2019-05-13 17:14:10",
"positives": 14,
"total": 70,
"sha256": "c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83"
"date": "2019-05-13 17:14:10",
"positives": 1964,
"total": 70,
"sha256": "c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83"
Из-за того, что сначала сортируются новые ответы, создается впечатление, что они с большей вероятностью будут замечены первыми, и их будут считать первыми, что немного .. странно.
Ну, в любом случае, у меня было еще две Версии этого, которые я хотел опубликовать вчера вечером, но буквально должен был бежать, чтобы успеть на поезд.
Оба из них улучшают сценарий, исключая использование цикла For Loop, для получения результатов быстрее, как в точном исходном формате, так и в виде выходных данных таблицы. =
Это позволит сгенерировать результаты в том виде, в котором они изначально были изложены, быстрее, чем при использовании цикла For:
$string = "positives`": *([5-9]|\d\d+)"
$fileread = "Y:\testttt.txt"
(Select-String $string $fileread -Context 0, 2 | select @{n="Results";e={$_.line + $_.Context.PostContext} } ).Results
Пример результатов:
PS Y:\> (Select-String $string $fileread -Context 0, 2 | select @{n="Results";e={$_.line + $_.Context.PostContext} } ).Results
"positives": 5, "total": 71, "sha256": "6d371555e08ba2b2397fd44a0db31605e7def831585c4c11dbb21c70d89e3b35"
"positives": 14, "total": 70, "sha256": "c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83
"positives": 1964, "total": 70, "sha256": "c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83"
При этом информация разбирается в таблице со столбцами соответствующей информации без цикла For, который сделает еебыстрее.
$string = "positives`": *([5-9]|\d\d+)"
$fileread = "Y:\testttt.txt"
Select-String $string $fileread -Context 0, 2 | select (
@{n="Positives";e={$($("$($_.line)" -split ':')[1]).trim() -replace '[\t ,]*','' } },
@{n="Total";e={$($($($_.Context.PostContext) -split ':')[1]).trim() -replace ',.*','' } },
@{n="Cipher";e={$($($($($_.Context.PostContext) -split ':') -split ',')[3]).trim() -replace '[\t "]+','' } },
@{n="Hash";e={$($($($_.Context.PostContext) -split ':')[3]).trim() -replace '[\t "]+','' } }
) | FT
И результаты этого выглядят так:
Positives Total Cipher Hash
--------- ----- ------ ----
5 71 sha256 6d371555e08ba2b2397fd44a0db31605e7def831585c4c11dbb21c70d89e3b35
14 70 sha256 c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83
1964 70 sha256 c5bd171025b10ba777008c349b26863a5259a7f45ad46ab71d9f227a2959ab83