bash замените ip именем хоста, используя nslookup для файла

У меня есть временный файл, который выводит эту информацию

1.2.3.4 34
1.2.3.5 23
1.2.3.6 22

Первые столбцы - это IP-адреса, а второй - одновременные соединения с базами данных, мне нужно вывести первый столбец не как IP-адрес, а как хост, и сохранить информацию о втором столбце.

Желаемый вывод

hostname1 34
hostname2 23
hostname3 22

заранее спасибо...

3 ответа

Решение

Что-то вроде этого может быть:

#!/bin/bash
while read ip n
do
   # Uncomment following to use /etc/hosts
   # name=$(awk -v ip=$ip '$1 ~ ip{print $2}' /etc/hosts)
   # Uncomment following to use nslookup
   # name=$(nslookup $ip| grep "name ="|sed 's/.*=//')
   # Uncomment following line to use dig (thanks to Charles Duffy)
   # name=$(dig +short -x $ip)
   echo $name $n
done < file

Не совсем уверен, чего вы хотите достичь, но это буквально даст "желаемый результат"

awk 'BEGIN {x = 1} {printf "hostname%s %s\n", x, $2; x += 1}' tempfile

Как насчет logresolve от apache2-utils? Он определяет, что выглядит как IP-адрес, и заменяет его на разрешенное имя хоста:

$ cat tempfile
1.2.3.4 34
1.2.3.5 23
1.2.3.6 22

$ cat tempfile | logresolve
hostname1 34
hostname2 23
hostname3 22
Другие вопросы по тегам