Parece que você precisa de algo assim:
awk '
NR == FNR {ip[$1]=1; next}
$1 in ip {print; delete ip[$1]}
END {
for (i in ip) {
system("host " i)
}
}
' srcip ~/db
Eu tenho um pedaço de código aqui que basicamente pega um arquivo chamado 'srcip' (que é apenas uma lista de endereços IP) e o compara ao meu arquivo '~ / db' que é apenas um banco de dados IP HOSTNAME delimitado por tabulações. servidores que temos em nosso ambiente. O objetivo é pegar o arquivo 'srcip' e combiná-lo com o que está no arquivo ~ / db para obter o nome do host. Ele funciona bem, mas há muitos endereços IP que não estão intencionalmente no arquivo ~ / db devido a problemas de DHCP, portanto, precisamos de uma pesquisa de host real usando o comando host
. O que eu gostaria é basicamente colocar uma declaração if neste código awk que irá verificar se o IP não corresponde no banco de dados, então execute o comando host no ip e me dê a saída. Como posso fazer isso aqui?
awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1]!=$2 {print $1, a[$1], $2}' OFS="\t" srcip ~/db
Estou ciente de que o awk pode usar if
instruções como esta abaixo para verificar se algum usuário do sistema tem um shell / bin / bash:
awk -F':' '{ if ($3 < '500' && $7 != "/bin/bash" ) print $0 }' /etc/passwd
Como afirmado, preciso usar algo que analise esses dados rapidamente, como awk ou sed e não dependa de nenhum loop. Por favor, tenha em mente que eu já posso fazer isso com um loop while, mas dada a natureza de um loop while, ele está analisando linha por linha e lento para nosso uso, já que temos quase 100.000 IPs para analisar de cada vez, se não mais. Para 2000 linhas, posso executar este trecho de código, mas, novamente, não é isso que desejo fazer:
#!/bin/bash
while read this_IP_address
do
db_host=$(grep "^$this_IP_address" ~/db | awk -F ' ' '{print $2}')
if [ "$db_host" = "" ]
then
host $this_IP_address | head -n 1 | awk -F ' ' '{print $5}'
else
echo $db_host
fi
done
Parece que você precisa de algo assim:
awk '
NR == FNR {ip[$1]=1; next}
$1 in ip {print; delete ip[$1]}
END {
for (i in ip) {
system("host " i)
}
}
' srcip ~/db
Tags bash awk sed linux shell-script