Log Parsing

Предадени решения

Краен срок:
21.10.2014 17:00
Точки:
10

Срокът за предаване на решения е отминал

В работата си като програмист няма как да не се срещнете с логове от дълго вървящи програми. Обикновенно това са едноредови съобщения, които оповестяват случването на някакво събитие. Тези едноредови съобщения често се записват в лог файл едни след друго. За логовете може да се каже, че имат някакъв общ формат за всички редове в един лог файл и обикновенно на всеки ред има някаква дата, на която се е случило събитието.

Вашата задача ще е да напишете функция, която да получава съдържанието на такъв лог файл и да извлича от него някои интересни неща. Формата на един ред в този лог файл е:

<време във формат YYYY-MM-DD hh:mm:ss> <IPv4 адрес> <свободен текст>

Ето пример за няколко реда от такъв файл:

2015-08-23 12:37:03 8.8.8.8 As far as we can tell this is a DNS
2015-08-23 12:37:04 8.8.4.4 Yet another DNS, how quaint!
2015-08-23 12:37:05 208.122.23.23 There is definitely some trend here

Конкретно, функцията, която трябва да напишете, е:

func ExtractColumn(logContents string, column uint8) string

Тя приема като свой аргумент съдържанието на лог файл в описания формат и връща стринг, който за всеки ред от оригиналния лог е извлякъл една от колоните му. Коя колона да извлече се задава с втория аргумент на функцията. 0 означава първата колона, 1 - втората и 2 - третата.

Ако променливата exampleLog е лог файла от горния пример, то извикването на

ExtractColumn(exampleLog, 1)

трябва да върне стринга

8.8.8.8
8.8.4.4
208.122.23.23

Няколко пояснения

  • Лог файловете в тази задача използват UNIX стила за нов ред, което значи един единствен символ \n. Очакваме и от вас да направите същото във върнатия резултат.
  • Реда от оригиналния лог файл трябва да бъде запазен.
  • За втория аргумент няма да даваме невалидни числа.
  • Върнатият от вас стринг трябва да завършва с един нов ред ако в него има поне един ред, независимо от това дали лога във входния аргумент го прави или не.