Awk variável passando pergunta

1

Este é o código que eu escrevi para resolver DNSs e saída para um arquivo. Existe uma maneira de renunciar inteiramente ao loop while e apenas escrever em awk ? Ele funciona perfeitamente, mas parece muito complicado e ineficiente, leva cerca de 10 minutos para 25k linhas de IPs. Terá prazer em elaborar o roteiro, se a clareza for necessária.

#!/bin/bash

while read line; do
  echo -en " ${startCount} / ${endCount} IPs resolved\r"
  ip=$(echo ${line} | cut -d "," -f1)
  col2=$(nslookup ${ip} | fgrep "name" | sed -e 's/\t/,/g' -e 's/name = //g' -e 's/.uncc.edu.//g' | cut -d "," -f2)
  if [[ ! -z ${col2} ]]; then
    echo "${line}" | awk -F"," -v var="${col2}" '{print ","var","","","","","}' >> ${outFile}
  else
    echo "${line}" | awk -F"," '{print ",""UNRESOLVED"","","","","","}' >> ${outFile}
  fi
  ((startCount++))
done < 
    
por Roboman1723 12.02.2015 / 15:54

1 resposta

2

Tente isto:

gawk -F, '
    # spawns nslookup as a coprocess, passes the IP into its stdin
    # then reads the output of the coprocess to find the hostname
    function get_name(ip,      line, name) { 
        name = "UNRESOLVED"
        print ip |& "nslookup"
        close("nslookup", "to")
        while (("nslookup" |& getline line) > 0) {
            if (match(/name =(.+)\.uncc\.edu\./, line, m)) 
                name = m[1]
        }
        close("nslookup")
        return name
    }
    { print , get_name(), , , , ,  }
' "" > "$outfile"

ref: link

    
por glenn jackman 12.02.2015 / 16:51