Это - код, который я написал, чтобы разрешить 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}
Попробуйте это:
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