Переменная Awk передающий вопрос

Это - код, который я написал, чтобы разрешить DNSs и произвести в файл. Есть ли способ воздержаться while цикл полностью и просто пишет в awk? Это работает отлично, но это кажется очень громоздким и неэффективным, занимает приблизительно 10 минут для 25k строк дюйм/с, с удовольствием уточнит сценарий, если ясность будет необходима.

#!/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 $1","var","$2","$3","$4","$5","$6}' >> ${outFile}
  else
    echo "${line}" | awk -F"," '{print $1",""UNRESOLVED"","$2","$3","$4","$5","$6}' >> ${outFile}
  fi
  ((startCount++))
done < ${1}
1
задан 12 February 2015 в 17:56

1 ответ

Попробуйте это:

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 $1, get_name($1), $2, $3, $4, $5, $6 }
' "$1" > "$outfile"

касательно: https://www.gnu.org/software/gawk/manual/html_node/Two_002dway-I_002fO.html

2
ответ дан 7 December 2019 в 14:01

Другие вопросы по тегам:

Похожие вопросы: