Продолжение предыдущей статьи... Конвертируем - Очищаем 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 "песочникце"
Комментариев нет:
Отправить комментарий