2013-11-07 3 views
3

Я пытаюсь проанализировать HTML-документ с awk.Анализ фрагмента HTML с awk

Документ содержит несколько блоков <div class="p_header_bottom"></div

<div class="p_header_bottom"> 
    <span class="fl_r"></span> 
    287,489 people 
    </div> 
    <div class="p_header_bottom"> 
    <span class="fl_r"></span> 
    5 links 
    </div> 

Я использую

awk '/<div class="p_header_bottom">/,/<\/div>/'

получить все такие Див-х.

Как я могу получить 287,489 номер от первого?

Фактически awk '/<\/span>/,/people/' не работает должным образом.

+0

Почему AWK для разбора HTML? Используйте лучший инструмент, такой как PHP и его парсер DOM – anubhava

+0

@anubhava, потому что мне нужно всего несколько элементов информации с одной страницы, а 'curl | awk 'фоновые задачи, порожденные скриптом bash, делают 10000 страниц за одну минуту. PHP будет слишком дорогим как с точки зрения памяти, так и с точки зрения ЦП. – zavg

+0

Я не слишком уверен в том, что PHP стоит дорого, поскольку он может выполнять как завитущую часть, так и позже парсинг в том же коде, поэтому по существу вы будете вызывать только 1 двоичный файл из командной строки. Более важно то, что анализ с использованием DOM также будет точным. Только если вы на 100% уверены в местонахождении и организации этого HTML-кода, переходите к sed/awk для синтаксического анализа. – anubhava

ответ

5

С , и предполагая, что только цифры и запятые внутри каждого <div> </div> блока происходит в числовой части интереса

awk -v RS='<[/]?div[^>]*>' '/span/ && /people/{gsub(/[^[:digit:],]/, ""); print}' file.txt 
+1

+1 Я люблю awk-решения, которые переопределяют RS –

+0

@glennjackman, хороший улов, исправлен. Не знаю, почему '' 'работает! – iruvar

Смежные вопросы