2011-01-27 5 views
0

은 내가AWK 배열 출력

ip_array=['192.168.1.100' '192.168.1.101' '192.168.1.102' '192.168.1.103' '192.168.1.104' '192.168.1.105' '192.168.1.106' '192.168.1.107' '192.168.1.108' '192.168.1.109' '192.168.1.110'] 

내가 ip_array에 대한 iptables에 출력을 실행하고 결과를 얻을하려는 IP 목록 배열을 가지고있다. 예를 들어 내가

iptables -L RRDIPT -vnx -t filter |awk '!/destination/{a[$9]+=$2}END{for(item in a){total+=a[item];dl[item]=a[item];printf item"-"a[item]}}' 

하지만 IP 주소가 난 내 출력이 같은 형식이어야 할 계속 변경 이후 AWK

를 사용하여 바이트의 정보를 얻을 수 있다는 것을 알게 내 이전 게시물에서

pkts  bytes target  prot opt in  out  source    destination 
    83276 4337105 RETURN  0 -- *  *  192.168.1.106  0.0.0.0/0 
    166008 230477883 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.106 
     0  0 RETURN  0 -- *  *  192.168.1.107  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.107 
     0  0 RETURN  0 -- *  *  192.168.1.103  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.103 
     99  9144 RETURN  0 -- *  *  192.168.1.102  0.0.0.0/0 
     79 11590 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.102 
     0  0 RETURN  0 -- *  *  192.168.1.101  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.101 
    994874 51992106 RETURN  0 -- *  *  192.168.1.100  0.0.0.0/0 
2398169 3594009427 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.100 
     0  0 RETURN  0 -- *  *  192.168.1.106  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.106 

..

i.e bytesof 192.168.1.100, bytesof 192.168.1.102, bytesof 192.168.1.103, bytesof 192.168.1.104.......bytesof 192.168.1.110 

제가

아래 출력 를보고 싶다

0 I는 I 글로벌 배열로 배열 dl 선언

iptables -L RRDIPT -vnx -t filter |awk '!/destination/{a[$9]+=$2}END{for(item in a){if(item==ip_array[i]){dl[i]=a[item];printf dl[i];}else{dl[i]=0}i+=i;}}' 

를 사용하려하지만 추가 처리를 위해 예컨대 dl[0] 값에 액세스 할 수없는 것.

아무도 도와 줄 수 있습니까?

+0

: P – Shoban

+0

내가 무서워도 문제 – Javanator

+0

내가 충분히 용감 오전를 포맷입니다) -하지만 지금은 다른 사람이 그것을 대답) – ocodo

답변

1

이 시도 :

iptables ... | awk 'BEGIN { base="192.168.1"; startrange=100; endrange=110 } NR > 1 { a[$9] += $2} END {for (i=startrange; i<=endrange; i++) {ip = base "." i; if (! a[ip]) a[ip] = 0; print ip, a[ip]}}' 

변경 startrangeendrange 값을 이용할 수 있습니다.

예 출력 : 내가 질문을 포맷 무서워

192.168.1.100 9196 
192.168.1.101 0 
192.168.1.102 0 
192.168.1.103 0 
192.168.1.104 21009126 
192.168.1.105 0 
192.168.1.106 0 
192.168.1.107 10333 
192.168.1.108 0 
192.168.1.109 0 
192.168.1.110 120 
+0

훌륭하게 작동합니다. 정말 도움을 주셔서 감사합니다 ... – Linus

+0

@user : 도움이 되었기 때문에 기쁩니다. 질문에 대한 답변을 수락 된 것으로 표시하는 것을 잊지 마십시오 (수락 가능한 경우). –