Bash tr sed / awk сложный сценарий - PullRequest
0 голосов
/ 21 сентября 2018

Сервер предоставляет список идентификаторов активов, разделенных запятыми в квадратных скобках после даты и двоеточий:

20160420084726:-
20160420085418:[111783178, 111557953, 111646835, 111413356, 111412662, 105618372, 111413557]
20160420085418:[111413432, 111633904, 111783198, 111792767, 111557948, 111413225, 111413281]
20160420085418:[111413432, 111633904, 111783198, 111792767, 111557948, 111413225, 111413281]
20160420085522:[111344871, 111394583, 111295547, 111379566, 111352520]
20160420090022:[111344871, 111394583, 111295547, 111379566, 111352520]

Формат журнала ввода:

timestamp:ads

Где: отметка времени имеет формат YYYYMMDDhhmmss, а объявления - это разделенный запятыми список идентификаторов рекламных активов, заключенный в квадратные скобки, или - если реклама не возвращалась.

Первая часть задачи заключается в написанииСценарий, который выводит для каждого десятиминутного среза дня:

Количество возвращенных идентификаторов Количество возвращаемых уникальных идентификаторов Сценарий должен поддерживать параметр командной строки, чтобы выбрать, следует ли указывать уникальные или общие идентификаторы.Пример вывода с использованием приведенной выше выдержки из журнала (в общем режиме):

20160420084:0
20160420085:26
20160420090:5

И в режиме уникального подсчета это даст:

20160420084:0
20160420085:19
20160420090:5

Я пробовал это:

awk -F '[,:]' '
                    {
                      key = substr($1,1,11)"0"
                      count[key] += ($2 == "-" ? 0 : NF-1)
                    } 
                    END {
                    PROCINFO["sorted_in"] = "@ind_num_asc"
                    for (key in count) print key, count[key]
                  }
                    ' $LOGFILENAME | grep $DATE;

Однако многие сценарии терпят неудачу.Например этот:

файл журнала: https://drive.google.com/file/d/1sXFvLyCH8gZrXiqf095MubyP7-sLVUXt/view?usp=sharing

Первые несколько строк результатов должны быть:

неуникально:

20160420000:1
20160420001:11
20160420002:13
20160420003:16
20160420004:3
20160420005:3
20160420010:6

уникальный:

20160420000:1
20160420001:5
20160420002:5
20160420003:5
20160420004:3
20160420005:3
20160420010:4

Помогите пожалуйста :s

...