Вычислять хиты в течение промежутка времени из файла журнала

Мне нужно использовать утилиты UNIX, которые реализуют встроенные алгоритмы разделения и покоя, чтобы уменьшить количество используемой виртуальной памяти (колпачок 1 мб). У меня большой набор данных, который является файлом журнала Apache. Я могу извлечь все IP-адреса и дату (преобразованную в unix time (s)) и сохранить ее в файле csv, называемом хитами.

ip,timestamp 62.172.72.131,1041502001 62.121.107.115,1041809792 163.28.16.1,1043258352 216.37.59.126,1044304131 68.104.188.224,1044472900 66.137.118.69,1044543502 62.172.72.131,1041502098 207.181.42.20,1044646708 205.156.184.254,1045670100 80.225.248.61,1045779615 200.44.24.157,1046214366 193.63.247.68,1046260886 66.176.248.72,1046317786 216.249.85.109,1046566502 68.44.222.12,1046638290 130.113.69.66,1048009156 143.43.220.157,1048026293 

Теперь мне нужно создать файл сеансов, который состоит из IP, времени и количества обращений. Сессия длится 30 минут. Например, для хита 62.172.72.131 он должен просмотреть файл и найти все обращения с этим IP-адресом и определить, находится ли он в этом сеансе. Седьмой хит имеет этот IP-адрес и 1041502097 - 1041502001 = 97 sec что составляет 30 минут, поэтому мы должны записать в файл сеансов 62.172.72.131,97,2 . Это необходимо группировать по IP-адресу и вычислять сеансы для этого IP-адреса, т. Е. Сеанс составляет 30 минут, если должен быть сгенерирован IP-адрес за пределами этого сеанса (> 1800 секунд), чем новая строка сеанса.

Я работал над следующим кодом

 awk 'BEGIN { FS=OFS=SUBSEP=","}{arr[$1]= $2 }END {for (i in arr) {...}}' hits.csv | sort -n 

В настоящее время я понятия не имею, как вычислять сеансы, и все дубликаты исчезают, когда я печатаю i и arr [i]. Я думал, что сортировка по IP-адресу, тогда все образы от одного и того же IP появятся последовательно.

One Solution collect form web for “Вычислять хиты в течение промежутка времени из файла журнала”

Я не уверен, что вам действительно нужно … Это в основном вклад, а не ответ.

Ниже мы вычисляем число «сеанс» и подсчитываем количество a[session][ip] хитов

 #!/usr/bin/gawk -f BEGIN { FS=OFS="," } { session = int($2/1800); a[session][$1] ++ } END { for(session in a){ for(ip in a[session]){ print a[session][ip], ip , session } } } 

Заметки:

  • 1800 = 30 м * 60 с
  • если полезная печать через sort: print a[session][ip], ip , session | "sort -Vr" print a[session][ip], ip , session | "sort -Vr"
  • Как отправить sendmail в новый maillog
  • Как настроить регистрацию для ulimits?
  • Как написать сценарий оболочки перезапустить apache, если `сервер достиг MaxClients`
  • rsyslog: make% syslogtag% равна длине
  • Посетители, посетившие / стр. 1, а также / стр. 2
  • Создание значимых сообщений об объявлении эткриптора
  • Устранение неполадок сообщения об ошибке «противоречит существующим заданиям» systemd
  • Как остановить sudo PAM-сообщения в auth.log для конкретного пользователя?
  • Как процесс (user1) может записывать журнал в каталог (root)
  • Журналы ошибок потока
  • Настроить Невозможно записать журналы в другой файл на управляемых серверах
  • Linux и Unix - лучшая ОС в мире.