Você poderia fazer algo assim:
awk '/GET / {print $1}' /var/log/nginx/access.log | sort -n | uniq -c | \
sort -rn | head -20 | awk '{print $2}' | while read row; do host $row; done
Eu adicionei um linebreak para torná-lo mais redably aqui.
Eu removi grep
porque você pode filtrar com awk
diretamente.
Esse trecho de código: awk '{print $2}' | while read row; do host $row; done
executará o comando host
em cada linha (endereço ip).
EDITAR
Isso manterá a contagem inicial e a ordem:
awk '/GET / {print $1}' /var/log/nginx/access.log | sort -n | uniq -c | \
sort -rn | head -20 | while read row; do z=$( echo $row | awk '{print $2}' ); \
echo "$row $(host $z)"; done
Não é exatamente uma solução bonita, mas funciona.