Количество слов SCALA в группах - PullRequest
0 голосов
/ 22 мая 2018
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

Из приведенных выше примеров данных мне нужно сосчитать число раз SIPB:7827214454065563030@127.0.0.1:3 слово произошло для конкретной даты, которая может быть сгруппирована в Live Connections Также мне нужно распечатать метку даты того же временигруппа.У меня есть логика о том, как подсчитать их в общей сложности, но вопрос в том, как подсчитать их в группах и вывести строку, состоящую из 3 строк, обратно в строку Live Connections: Группу SIPB под Group Dump не следует подключать и удалять,

Подобно тому, как полученное значение o / p должно быть таким,

O / P

2018-03-22 04:26:29.0 PM:
4
2018-03-22 04:34:49.0 PM:
4

Код, который я использовал для подсчета числа cat: всего

val lines = Source.fromFile("/home/kafka/Downloads/newdump.txt").getLines().filter(!_.isEmpty()).mkString  
dictionary = Map( """cat:""" -> 1)
val res = dictionary.map { case(k,v) => k -> k.r.findAllIn(lines).size }

1 Ответ

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

Не уверен, что в ваших реальных данных должна быть какая-то другая информация, которая может помешать разделению регулярных выражений, но это работает, если исходить из данных вашего примера.

Сначала разбейте входную строку на списокСтроки, которые начинаются с метки времени.Далее для каждого элемента в этом списке вам нужно найти дату и количество экземпляров 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...