2013-05-21 3 views
2

txt 파일로 내 보낸 AXFR 파일의 일부인 파일을 읽는 중입니다. 기본적으로, 나는 cat 파일을 grep 아웃에만 PTR 레코드 (나는이 지금에만 관심이 있어요). awk을 사용해 보았지만 awk에 대한 전반적인 지식이 제한되어 있으며 아직 광범위하게 학습하지는 않습니다.영역 파일에서 IP 및 포인터 레코드 추출

내가 할 출력을 필요로 무엇
1.0.0.10.in-addr.arpa. 1800 IN PTR name-1.something.something.else. 
2.0.0.10.in-addr.arpa. 1800 IN PTR name-2.something.something.else. 
3.0.0.10.in-addr.arpa. 1800 IN PTR name-3.something.something.else. 
4.0.0.10.in-addr.arpa. 1800 IN PTR name-4.something.something.else. 
5.0.0.10.in-addr.arpa. 1800 IN PTR name-5.something.something.else. 

그때가 가리키는 실제 레코드 (반전 될 필요) IP 주소의 PTR은, 그래서, : 여기처럼 파일이 가지 모습입니다

10.0.0.1 PTR  name-1.something.something.else. 
10.0.0.2 PTR  name-1.something.something.else. 
10.0.0.3 PTR  name-1.something.something.else. 
10.0.0.4 PTR  name-1.something.something.else. 
10.0.0.5 PTR  name-1.something.something.else. 

내가 AWK로 할 수있는이 뭔가, 만일 그렇다면, 방법 : 위의 무엇의 출력과 같을 것이다? 나는 그것을 작동시키는 데 어려움을 겪고 있으며, 논리적으로 어떻게 작동하는지에 대해서는 정체 상태입니다.

답변

2

awk은 파일에서 읽고 패턴 일치를 수행 할 수 있으므로 cat 또는 grep을 사용할 필요가 없습니다.

awk '/PTR/ { split($0, ip, /\./); 
      printf("%s.%s.%s.%s\tPTR\t%s\n", ip[4], ip[3], ip[2], ip[1], $NF); 
      }' filename 
0
... | perl -ne ' 
while (<STDIN>) 
{ 
    my ($ip, $record) = (split (/\s+/))[0, 4]; 
    $ip =~ s/\Q.in-addr.arpa.\E$//; 
    my @tks = split (/\./, $ip); 
    print join (".", reverse (@tks)), " PTR $record\n"; 
} 
' 
0

은 나오지 :

sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\).\([0-9]*\).*\(PTR\)/\4.\3.\2.\1\t\5\t/' file