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