2013-05-21 1 views
2

Я читаю файл, который является частью файла AXFR, который я экспортировал в txt-файл. В принципе, я cat из файла, grep out ТОЛЬКО 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

Вам не нужно использовать 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 
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 
Смежные вопросы