Это выполняет поиск по каждой строке и возвращает что-то вроде того, что вы хотите:
awk '{ print $1,$4,$5 }' access_log | while read ip dt1 dt2
do
echo $dt1 $dt2 $ip `host $ip | awk '{ print $5}'`
done
... однако, я пытаюсь точно определить, какой вывод вы пытаетесь получить?Вы хотите самую последнюю дату / время для каждого IP?Я заметил, что вы делаете uniq для значений - пытаясь понять, почему это так, или это просто для уменьшения количества выполненных поисков?Если это последнее, то вы можете сделать это:
TMPFILE=hosts.$$
LOGFILE=x.log
echo 'Creating lookup tempfile...'
awk '{ print $1 }' $LOGFILE | sort | uniq | while read ip
do
echo $ip `host $ip | awk '{ print $5 }'`
done > $TMPFILE
echo 'Date/host report...'
awk '{ print $1,$4,$5 }' $LOGFILE | uniq | while read ip dt1 dt2
do
echo $dt1 $dt2 $ip `grep "^$ip" $TMPFILE | awk '{ print $2 }'`
done
rm $TMPFILE
Возможно, снова будет лучший способ (например, с помощью perl) - это полностью зависит от размера файла журнала, который вы обрабатываете.Если это может стать большим файлом, то делегирование части работы на perl может стоить сделать, так как такие вещи, как временный файл, который я использовал выше, могут фактически храниться в хэше в памяти, снова улучшая производительность.1007 *