CSS for code highlight

06 марта 2022

Преобразование HTML в CSV или обработка HTML таблиц в Bash-2

Продолжение предыдущей статьи... Конвертируем - Очищаем HTML до состояния чистого CSV, при помощи sed:

sed -e '/\(html\|title\|body\|table\)/d' -e 's/ \{2,\}//g' report.html | \
  sed ':a;N;$!ba;s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#g' | \
  sed ':b;N;$!bb;s#\s*</td>\s*<td>\s*#;#g' | \
  sed '/\(tr>\|<td\|td>\)/d' | \
  iconv -f windows-1251 -t utf-8

Для суммирования значений по всем файлам конкретно в моем случае достаточно ... заменить </td><td> на ; и обработать результат в awk:

sed ':b;N;$!bb;s#\s*</td>\s*<td>\s*#;#g' *.html | \
  awk -F ';' '/\(02\)/ {sum += $2} END {print sum}'

PS: через awk отбираем строки содержащие искомое (02) (нужная нам строка для "группировки") и суммируем по второму значению после разделителя ;

UPDATE: переписал конвертацию HTML в CSV одной командой sed:

sed '/title/d
     :a;N;$!ba
     s/ \{2,\}//g
     s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#g
     s#\s*</td>\s*<td>\s*#;#g
     s/<[^>]\+>//g
     s/\n\{2,\}//g' report.html

изменения можно применять сразу к файлу с опцией -i

UPDATE 2: Это решение, как мне кажется, скорее всего будет самым правильным:

sed ':a;N;$!ba
     s/<html.\+<table[^>]\+>//Ig
     s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#Ig
     s#\s*</td>\s*<td>\s*#;#Ig
     s/<[^>]\+>//g;s/\s\{2,\}//g' report.html

Пример можно посмотреть в online bash "песочникце"

Комментариев нет:

Отправить комментарий

Последнее...

CURL вместо Postman / Swagger