我正在读取一个文件,该文件是我导出到txt文件的AXFR文件的一部分。基本上,我cat
输出文件,只打出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做的事情,如果是这样,怎么样?我有麻烦让它上班,而我在逻辑上如何使这个工作处于停滞状态。
答案 0 :(得分:2)
您不需要使用cat
或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
答案 1 :(得分: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";
}
'
答案 2 :(得分:0)
仅限sed:
sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\).\([0-9]*\).*\(PTR\)/\4.\3.\2.\1\t\5\t/' file