Сервер предоставляет список идентификаторов активов, разделенных запятыми в квадратных скобках после даты и двоеточий:
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