Проблема заключалась в компьютере шлюза. (Неверная конфигурация IP-маскарада )между моим локальным компьютером и сервером NFS.
Компьютер гейта был перезагружен, интерфейсы eth были подняты (с помощью ifup )и перезапущен брандмауэр (На гейте был установлен rc.firewall -2.4)
Это послужило хорошей ссылкой :http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/
<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
Принятый ответ почти идеален, но всегда были нежелательные пустые строки или иногда несколько 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] }'