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
. Очакваме и от вас да направите същото във върнатия резултат. - Реда от оригиналния лог файл трябва да бъде запазен.
- За втория аргумент няма да даваме невалидни числа.
- Върнатият от вас стринг трябва да завършва с един нов ред ако в него има поне един ред, независимо от това дали лога във входния аргумент го прави или не.