현재 일부 아파치 로그를 구문 분석하기 위해 무언가를 작성 중이지만 system
명령이 인쇄 위에 배치되는 것 같습니다. 아직 이 작업을 많이 수행하지 않았 awk
으므로 아마도 매우 간단한 작업일 것입니다.
IFS=$'\n'
for ja in `cat test.apache.access_log | awk '{print $1}' | sort -n | uniq -c | sort -rn | head -3`
do
echo $ja|awk '{print "Count\tIP\t\tNSLookup"}{print $1"\t",$2,"\t\t",system("nslookup " $2"|grep name")}'
done
내가 얻는 것:
Count IP NSLookup
RR.ZZ.YY.XX.in-addr.arpa name = ja.server.net.
241 XX.YY.ZZ.RR 0
내가 보고 싶은 것은:
Count IP NSLookup
241 XX.YY.ZZ.RR RR.ZZ.YY.XX.in-addr.arpa name = ja.server.net.
답변1
스크립트를 약간 재정렬해야 합니다.앗전혀 필요하지 않음
echo -e 'Count\tIP\tNSLookup'
while read count line ; do
echo -ne "$count\t$line\t"
nslookup $line | grep name
done < <(cut -d' ' -f1 test.apache.access_log | sort | uniq -c | sort -rn | head -3)
물론 awk를 통해서만 가능합니다.
awk '
BEGIN{
OFS="\t"
print "Count", "IP", "NSLookup"
}
{
A[$1]++
}
END{
for(a in A){
i = 3
while(i > 0 && A[a] > A[B[i]]){
B[i+1] = B[i]
i--
}
B[i+1] = a
}
for(b=1; b<4; b++){
"nslookup "B[b]" | grep name" | getline ns
print A[B[b]], B[b], ns
}
}
' test.apache.access_log