Apache регистрирует :сколько разных IP-адресов в день с sed или awk?

Проблема заключалась в компьютере шлюза. (Неверная конфигурация IP-маскарада )между моим локальным компьютером и сервером NFS.

Компьютер гейта был перезагружен, интерфейсы eth были подняты (с помощью ifup )и перезапущен брандмауэр (На гейте был установлен rc.firewall -2.4)

Это послужило хорошей ссылкой :http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/

-1
28.04.2021, 13:25
2 ответа
<infile awk -F'[[ :]' '{
    dt[$7]=(dt[$7]==""?"":dt[$7]) (!seen[$7,$3]++?"\t" $3:ORS) }
END{ for(d in dt)print d ORS dt[d] }'

(dt[$7]==""?"":dt[$7])вывести предыдущее содержимое массива dt , если он не пуст.
(!seen[$7,$3]++?"\t" $3:ORS)напечатать IP($3)(с префиксом табуляции ), если он ранее не использовался для этого DTAE($7 ), в противном случае напечатать новую строку (ORS по умолчанию ).

, который обновляет содержимое dt[$7]=...каждой DATE ($7 )значениями, указанными выше.


25/Jan/2021
        1.1.1.1
        2.2.2.2
13/Apr/2021
        4.4.4.4
12/Apr/2021
        33.33.33.33

для сортировки вывода (входные данные должны быть отсортированы по дате , скорее всего логи чаще сортируются по дате):

<infile awk -F'[[ :]' '{
    dt[$7]=(dt[$7]==""?"\0"NR"-" $7 ORS:dt[$7]) (!seen[$7,$3]++?"\t" $3:ORS) 
}
END{ for(d in dt) print dt[d] }' |sort -z |cut -z -d'-' -f2-

или с помощью GNU awk для параметров сортировки массивов:

<infile awk -F'[[ :]' '!date[$7]++{ ind++ }
    { dt[ind]=(dt[ind]==""?$7 ORS:dt[ind]) (!seen[$7,$3]++?"\t" $3:ORS)
}
END{ PROCINFO["sorted_in"]="@ind_num_asc"; for(d in dt) print dt[d] }'

25/Jan/2021
        1.1.1.1
        2.2.2.2
12/Apr/2021
        33.33.33.33
13/Apr/2021
        4.4.4.4
1
28.04.2021, 22:50

Принятый ответ почти идеален, но всегда были нежелательные пустые строки или иногда несколько IP-адресов в одной строке.

Так что эта небольшая модификация заставила меня работать:

awk -F'[[ :]' '{ dt[$7]=(dt[$7]==""?"":dt[$7]) (!seen[$7,$3]++?"\t"$3"\n":"") } END{ PROCINFO["sorted_in"]="@ind_num_asc"; for(d in dt)print d ORS dt[d] }' other_vhosts_access.log

или это, если вы хотите фильтровать трафик с определенного домена/страницы

grep "example.com" other_vhosts_access.log |awk -F'[[ :]' '{ dt[$7]=(dt[$7]==""?"":dt[$7]) (!seen[$7,$3]++?"\t"$3"\n":"") } END{ PROCINFO["sorted_in"]="@ind_num_asc"; for(d in dt)print d ORS dt[d] }'
0
28.04.2021, 22:50

Теги

Похожие вопросы