Не уверен, что в ваших реальных данных должна быть какая-то другая информация, которая может помешать разделению регулярных выражений, но это работает, если исходить из данных вашего примера.
Сначала разбейте входную строку на списокСтроки, которые начинаются с метки времени.Далее для каждого элемента в этом списке вам нужно найти дату и количество экземпляров cat:
и вывести их вместе.
Fiddle: https://scalafiddle.io/sf/LvVDwxR/0
Вывод:
2018-03-22 04:26:29.0 PM:
4
2018-03-22 04:34:49.0 PM:
3
РЕДАКТИРОВАТЬ
Реальные данные содержат SIPB:
, а затем набор символов вместо cats:
.В приведенной ниже скрипте вы можете изменить мой приведенный выше код, чтобы получить те же выходные данные с этими данными.
Fiddle: https://scalafiddle.io/sf/92E8wmo/0
Выход:
2018-03-22 04:26:29.0 PM:
4
2018-03-22 04:34:49.0 PM:
3
РЕДАКТИРОВАТЬ 2
Используя данные, предоставленные Алексом, чтобы получить только примеры с Live Connections, вам просто нужно отфильтровать те, которые не't:
val input =
"""
|2018-03-22 04:26:29.0 PM:
|Daemon:
|Timed Out Connections:
|Live Connections:
|Live Audio/Video Connections:
|SIPB:124340495361123111@127.0.0.1:7
|SIPB:124340495361123111@127.0.0.1:4
|SIPB:124340495361123111@127.0.0.1:2
|SIPB:124340495361123111@127.0.0.1:6
|
|2018-03-23 08:05:12.0 AM:
|Group Dump:
|2018-03-23 08:05:42.0 AM:
|2018-03-23 08:05:45.0 AM:
|SIPB:7827214454065563030@127.0.0.1:3
|SIPB:7827214454065563030@127.0.0.1:2
|SIPB:7827214454065563030@127.0.0.1:1
|
|2018-03-22 04:34:49.0 PM:
|Daemon:
|Timed Out Connections:
|Live Connections:
|Live Audio/Video Connections:
|SIPB:124340495361123111@127.0.0.1:7
|SIPB:124340495361123111@127.0.0.1:4
|SIPB:124340495361123111@127.0.0.1:2
|SIPB:124340495361123111@127.0.0.1:6
""".stripMargin
val inputs = input.split("(?=\\d{4}-\\d{2}-\\d{2}[^\\n]*)").map(_.trim)
.filter(_.nonEmpty).filter(_.contains("Live Connections"))
val output = inputs.map {
x =>
val datePattern = "(\\d{4}-\\d{2}-\\d{2}[^\\n]*)".r
val date = (datePattern findAllIn x).toList.distinct.head
val sipbPattern = "(?=SIPB:[^\\n]*)".r
val sipbs = (sipbPattern findAllIn x).toList.size
s"$date\n$sipbs"
}.mkString("\n")
Fiddle: https://scalafiddle.io/sf/uwU5tSa/0
Выход:
2018-03-22 04:26:29.0 PM:
4
2018-03-22 04:34:49.0 PM:
4