Script awk para executar um comando baseado na condição usando 'se'

0

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
    
por unixpipe 17.10.2014 / 20:25

1 resposta

0

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
    
por 17.10.2014 / 20:47