Powershell Select-String с петлей и сокращением до .dat - PullRequest
0 голосов
/ 03 декабря 2018

Прежде всего, я прошу прощения за мой плохой английский

Я совершенно новичок в PowerShell и не настолько в программировании, но я хочу учиться

Так что моя проблемаis:

Я получил данные .conf с такими текстами:

[XYZ1 - XYZXYZ, XYZXYZ]
room a201*,f110
XYZXYZXYZ
XYZXYZXYZ
XYZXYZXYZ
XYZXYZXYZ

[XYZ2 - XYZXYZ, XYZXYZ]
room a202*,f110
XYZXYZXYZ
XYZXYZXYZ
XYZXYZXYZ

Моя цель - экспортировать текст в CSV или другие данные, подобные этому:

a201,[XYZ1 - XYZXYZ, XYZXYZ]
f110,[XYZ1 - XYZXYZ, XYZXYZ]
a202,[XYZ1 - XYZXYZ, XYZXYZ]
f110,[XYZ1 - XYZXYZ, XYZXYZ]

Таким образом, для каждого текста с квадратными скобками [] следует взять комнату (строка под) и проверить, есть ли другая комната (a201, f110), убрать слово «комната» и другие строки под звездочкой и"*" и экспортируйте его, как указано выше.

Мой первый шаг был примерно таким:

Select String -input C:\xyz\text.conf -pattern "\[*\]","room  *" | select line

Затем я попытался удалить слово "комната" с помощью Substring, но это не сработало,и я понятия не имею, как сделать цикл для каждой комнаты и экспортировать его в 2 столбца.

Надеюсь, вы, ребята, сможете мне помочь.

Привет Марселю

1 Ответ

0 голосов
/ 03 декабря 2018

Следующее может быть одним из решений.При этом используется свойство Context, равное Select-String, чтобы сохранить предыдущую строку, где вы можете затем разбить и заменить искомую строку, чтобы получить желаемый результат.

Select-String -input C:\xyz\text.conf -pattern 'room' -Context 1,0 | % {
    $current = $_
    $current.Line -split ',' | % {
      "$($_ -replace 'room ' -replace '\*'),$($current.Context.PreContext)"
    }
}

Тестовый сценарий

("[XYZ1 - XYZXYZ, XYZXYZ]",
"room a201*,f110",
"XYZXYZXYZ",
"XYZXYZXYZ",
"XYZXYZXYZ",
"XYZXYZXYZ",
"",
"[XYZ2 - XYZXYZ, XYZXYZ]",
"room a202*,f110",
"XYZXYZXYZ",
"XYZXYZXYZ",
"XYZXYZXYZ") | 
    sls 'room' -Context 1,0 | % {
        $current = $_
        $current.Line -split ',' | % {"$($_ -replace 'room ' -replace '\*'),$($current.Context.PreContext)"}
    }

Выход

a201,[XYZ1 - XYZXYZ, XYZXYZ]
f110,[XYZ1 - XYZXYZ, XYZXYZ]
a202,[XYZ2 - XYZXYZ, XYZXYZ]
f110,[XYZ2 - XYZXYZ, XYZXYZ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...