Вот метод, использующий оператор switch
:
$hash = [ordered]@{}
switch -regex -file test.log {
'^-+' { if ($hash.Count -ne 0) {
"{0} has been sold to {1}" -f $hash.Title,$hash.Client
}
$hash = [ordered]@{}
}
'^([^:]+):(.+)' { $key,$value = $matches[1].Trim(),$matches[2].Trim()
$hash.Add($key,$value)
}
}
Объяснение:
Переключатель -regex
использует сопоставление регулярных выражений для каждой строки файл. ^-+
соответствует любой строке, начинающейся с одного или нескольких -
. ^([^:]+):(.+)
соответствует любой строке, начинающейся с символов, отличных от двоеточия, после которых следует двоеточие, за которым следуют символы. Первая группа скобок включает группу захвата 1 ($matches[1]
). Вторая группа скобок включает группу захвата 2 ($matches[2]
).
$matches
будет заполняться строками, которые содержат :
и не начинаются с -
. Каждый раз, когда достигается строка, начинающаяся с -
, таблица ha sh ($hash
), содержащая Client
и Title
, будет извлекать свои значения и выводить их в строке с запрошенным форматом. Затем таблица ha sh повторно инициализируется.