Извлечение данных с помощью awk из нескольких файлов - PullRequest
0 голосов
/ 09 марта 2019

у меня есть 1000 таких файлов:

text1.txt

<span class="store-time">OPEN SINCE <em>Aug 9, 2010</em></span>

text2.txt

<span class="store-time">OPEN SINCE <em>Aug 9, 2012</em></span>

Я хочу извлечь все даты из 1000 файлов, каждый в новой строке, как это:

Aug 9, 2010
Aug 9, 2012
...

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Что ж, для анализа XML-инструментов, таких как awk или sed, это точно не первый выбор, потому что они скорее основаны на строках, а XML - нет.

Чтобы выполнить свою работу вawk, вы можете использовать что-то вроде:

awk '$0 ~ /<span class="store-time">.*/ {gsub(/^.*<em>/,"",$0) gsub(/<\/em>.*/,"",$0); print $0}' *.html

Эта команда принимает все html-файлы (* .html) и ищет строки, начинающиеся с <span class="store-time">.Затем он заменяет все от начала строки до первого <em> пустой строкой.Это делает то же самое для всего после </em> (включая </em>)

0 голосов
/ 10 марта 2019

Если вы уверены, что все ваши файлы имеют именно такой формат, вы можете использовать простое sed выражение

sed -E -e 's/^<span class="store-time">OPEN SINCE <em>([A-Z][a-z]+ *[0-9]+, *[0-9]+)<\/em><\/span>/\1/' 

Он просто находит начало вашей строки, за которым следует что-то, похожее на дату (буквы, после которых пробел и число, затем запятая и снова число) и конец вашей строки.
cat все ваши файлы и отправьте результат на sed ввод, и вы получите список дат.

Но, как указано в комментариях, синтаксический анализ XML-файлов может быть проблематичным (см., Например, RegEx соответствует открытым тегам, за исключением автономных тегов XHTML ). Если теги xml разбиты на несколько строк, сценарий не сможет извлечь информацию, например, со следующими данными

<span class="store-time">
OPEN SINCE <em>Aug 9, 2012</em>
</span>

Чтобы справляться с такими ситуациями, существуют более мощные инструменты. В качестве набора инструментов xmlstarlet или perl класса, как XML::libXML. Они могут выполнять более безопасный анализ, но они более сложны в использовании.

Если вы точно уверены, что все ваши файлы имеют правильное форматирование, сценарий sed может решить вашу проблему.

...