2

我正在读取一个文件,该文件是我已导出到 txt 文件的 AXFR 文件的一部分。基本上,我cat取出文件,只用 grep 取出PTR记录(我现在只对这些感兴趣)。我尝试过使用awk,但我对 awk 的整体了解有限,并且不打算广泛学习它。这是文件的样子:

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 做的事情吗?如果可以,怎么做?我在让它工作时遇到了麻烦,我对如何在逻辑上让它工作感到停滞不前。

4

3 回答 3

2

您不需要使用cator grep,因为awk可以从文件中读取并进行模式匹配。

awk '/PTR/ { split($0, ip, /\./);
             printf("%s.%s.%s.%s\tPTR\t%s\n", ip[4], ip[3], ip[2], ip[1], $NF);
           }' filename
于 2013-05-21T19:15:40.317 回答
0

仅 sed:

sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\).\([0-9]*\).*\(PTR\)/\4.\3.\2.\1\t\5\t/' file
于 2013-05-21T20:21:19.447 回答
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";
}
'
于 2013-05-21T19:17:16.600 回答