Чтение файла в шаблоне с использованием awk - PullRequest
1 голос
/ 07 июля 2010

У меня есть входной файл следующим образом

<td> Name1 </td>
<td> <span class="test"><a href="url1">Link </a></span></td>
<td> Name2 </td>
<td> <span class="test"><a href="url2">Link </a></span></td>

Я хочу, чтобы скрипт awk прочитал этот файл и вывел его следующим образом

url1 Name1
url2 Name2

Может кто-нибудь помочь мне в этой тривиальной проблеме? Спасибо.

Ответы [ 5 ]

2 голосов
/ 07 июля 2010

Извлечение одного href per относительно просто, при условии, что они соответствуют стандартам XHTML, а в строке есть не более одного, и вам не нужно включать теги, но perl проще: $ perl -ne 'print "$1\n" if /href="([^"]+)"/'

Если вы заботитесь о вложенных тегах или они не соответствуют стандарту, вы не можете использовать регулярные выражения для анализа HTML. Это невозможно.

добавлено: упс, вы заботитесь о контексте, забыли о регулярных выражениях и используете настоящий HTML-парсер

1 голос
/ 07 июля 2010

Вот скрипт awk, который выполняет работу

awk '
/a href=\".*\"/ { sub( /^.*a href=\"/,"" ); sub(/\".*/,"");  print $0, name }
                { name = $2 }
'
0 голосов
/ 12 апреля 2013

awk 'BEGIN{RS="></td>\n"; FS="> | </|\""}{print $7, $2}' infile

каждые 2 строки как запись.

0 голосов
/ 24 июля 2010
gawk '/^<td>/ {n = $2; getline; print gensub(/.*href="([^"]*).*/,"\\1",1), n}' infile

url1 Name1
url2 Name2
0 голосов
/ 07 июля 2010

это может сработать:

awk 'BEGIN
     {i=1}{line[i++]=$0}
     END
     {
      j=1; 
      while (j<i) 
      {print line[j+1] line[j]; j+=2}
     }' yourfile|awk '{print substr($4,7,length($4)-6),$6}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...