BASH - Как очистить таблицу HTML и распечатать ее на терминале

Я пытался очистить (используя BASH) таблицу с этого сайта: http://www.tesouro.fazenda.gov.br/tesouro-direto-precos-e-taxas-dos-titulos, которые являются текущими ценами. для государственных облигаций Бразилии. Я хочу разработать сценарий, который дает мне ту же таблицу, отформатированную для вывода на терминал, чтобы я мог назначить его псевдониму и быстро узнать цены (и опубликовать его на github, чтобы другие тоже могли его использовать, или даже использовать его на других код).

Что я сделал до сих пор:

#!/bin/bash
url="http://www.tesouro.fazenda.gov.br/tesouro-direto-precos-e-taxas-dos-titulos"

lynx -source "$url" |
grep -o '<tbody>.*</tbody>' |
#gets the entire line
sed 's/\(<tr>\|<\/tr>\)//g' |  
sed 's/<[^>]*>//g'
#cleans the html tags

Запуск "./script.sh > file.txt" дает мне вывод:

Исследователь Mercado Aberto 9 ч. 30 мин. С 18 ч. Предварительные требования к налогам и сборам. Текущий индекс доходности. Такси де Рендименто (% aa) Доблесть. 62 R $ 2,181,47 Tesouro IPCA+ 2035 (NTNB Princ) 15/05/2035 5,48 R $ 35,96 R $ 1,198,82 Tesouro IPCA+ 2045 (NTNB Princ) 15/05/2045 5,48 R 35,21 R $ 704, 20 Tesouro IPCA+ com Juros Semestrais 2026 (NTNB) 15/08/2026 5,10 R 32,72 R $ 3,272,36 Tesouro IPCA+ com Juros Semestrais 2035 (NTNB) 15/05/2035 5,35 R 32,63 R $ 3,263, 54 Tesouro IPCA+ com Juros Semestrais 2050 (NTNB) 15/08/2050 5,42 R$33,55 R$3.355,64 Prefixados Tesouro Prefixado 2020 (LTN) 01/01/2020 8,40 R 33,84 R$846,13 Tesouro Prefixado 2023 (LTN) 01.01.2023 10,20 R$30,58 R$611,76 Tesouro Prefixado com Juros Semestrais 2027 (NTNF) 01/01/2027 10,36 R$30,69 R$1,023,16 Indexados à Taxa Selic Tesouro Selic 2023 (LFT) 01.03.2023 0,00 R$92,38 R 9,238,83 Resgatar Mercado Aberto 9 ч 30 мин 18h Preços e taxas dos títulos públicos disponíveis para resgatar Título Vencimento Indexador Taxa de Rendimento (% aa) Предварительная единица индексов IPCA Tescaro IPCA+ 2019 (NTNB Princ) 15/05/2019 2,93 R$2,907NB 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: • ВЗИТ (IP $ 2,907NB)) 15/08/2024 5,17 R $ 2,164,92 Tesouro IPCA+ 2035 (NTNB Princ) 15/05/2035 5,60 R $ 1,175,37 Tesouro IPCA+ 2045 (NTNB Princ) 15/05/2045 5,60 R 682, 63 Tesouro IPCA+ com Juros Semestrais 2020 (NTNB) 15/08/2020 4,17 R $ 3.221,84 Tesouro IPCA+ com Juros Semestrais 2024 (NTNB) 15/08/2024 5,08 R $ 3.240,43 Tesouro IPCA+ com Juros Semestrais 2026 (NTNB) 15/08/2026 5,22 R $ 3,246,88 Tesouro IPCA+ com Juros Semestrais 2035 (NTNB) 15/05/2035 5,47 R $ 3.221,99 Tesouro IPCA+ com Juros Semestrais 2045 (NTNB) 15/05/2045 5, 56 R $ 3,231,12 Tesouro IPCA+ com Juros Semestrais 2050 (NTNB) 15/08/2050 5,54 R$3,298,33 Prefixados Tesouro Prefixado 2018 (LTN) 01/01/2018 7,06 R 994,86 Tesouro Prefixado 2019 (LTN) 01.01.2009 7,13 R$929,11 Tesouro Prefixado 2020 (LTN) 01.01.2020 8,52 R$844,19 Tesouro Prefixado 2021 (LTN) 01.01.2021 9,46 R$757,85 Tesouro Prefixado 2023 (LTN) 01/01/2023 10,32 R$608,40 Tesouro Prefixado com Juros Semestrais 2021 (NTNF) 01/01/2021 9,28 R$1,060,17 Tesouro Prefixado com Juros Semestrais 2023 (NTNF) 01.012023 10,08 R$1,039,70 Tesouro Prefixado com Juros Semestrais 2025 (NTNF) 01/01/2025 10,37 R$1,025,50 Tesouro Prefixado com Juros Semestrais 2027 (NTNF) 01/01/2027 10,48 R$1,016,60 Indexados à Taxa Selic Tesouro Selic 2021 (LFT) 01.03.2021 0,04 R 9,226,94 Tesouro Selic 2023 (LFT) 01.03.2023 0,04 R$9,219,57 Indexados ao IGP-M Tesouro IGPM+ com Juros Semestrais 2021 (NTNC) 01/04/2021 4,42 R$3.756,86 Tesouro IGPM+ com Juros Semestrais 2031 (NTNC) 01/01/2031 5,33 R 5,863,43

который на португальском, поэтому я постараюсь помочь получить помощь:

  1. К сожалению, все находится в одной строке, я полагаю, что это потому, что HTML-файл находится именно так, и grep получает его.
  2. Важные данные - сразу после последнего слова "инвестор" и первого "Ресгатар". Эти облигации можно купить у правительства.
  3. Между последним словом "resgatar" и концом таблицы находятся облигации, которые больше не доступны для покупки, но вы можете продать их правительству в любое время до наступления срока оплаты.
  4. Заголовки полей таблицы: "Titulo - Vencimento - Taxa de Rendimento (% aa) - Preço Unitario", что переводится как "Заголовок - Срок оплаты - Уровень участия (% год) - Цена за единицу")

Если бы вы, ребята, могли бы помочь мне, по крайней мере, убрать эти нежелательные "слова описания" между заголовками таблицы (то есть, начиная с начала строки до первого вхождения "Título", а затем из первого "Resgatar" до следующего вхождения "Título"), я считаю, что этот инструмент может помочь и другим.

Оттуда я могу попытаться выйти из остального файла и отформатировать так, как я хочу. Мне просто нужно удалить их, чего я не смог сделать, несмотря на поиск пары вопросов здесь, в стеке. Кроме того, если у кого-то есть более умный способ сделать то, что я собираюсь сделать, пожалуйста, не стесняйтесь отбросить все глупости, которые я сделал, и предложить более разумный подход в BASH!

Заранее большое спасибо.

1 ответ

Решение

Пример:

wget -q -O - 'http://www.tesouro.fazenda.gov.br/tesouro-direto-precos-e-taxas-dos-titulos' |\
  xmlstarlet format --recover --html 2>/dev/null |\
  xmlstarlet select --html --template --value-of "/html/body/div/div/div/div/div/div/div/div/div/div/table/tbody/tr/td[@class='listing0' or @class='listing' or @class='listing ']" |\
  paste -d ";" - - - - - |\
  column -s ";" -t

Выход:

Tesouro IPCA + 2024 (NTNB Princ) 15/08/2024 5,06 R $ 43,60 R $ 2.180,09
Tesouro IPCA + 2035 (NTNB Princ) 15/05/2035 5,48 R $ 35,96 R $ 1,198,82
Tesouro IPCA+ 2045 (NTNB Princ)                     15/05/2045  5,48 р. 35,21 р. 704,20 р.
Tesouro IPCA+ com Juros Semestrais 2026 (NTNB)      15/08/2026  5,10   R$32,72  R$3,272,36
Tesouro IPCA+ com Juros Semestrais 2035 (NTNB)      15/05/2035  5,35   R 32,63 R 3,263,54
Tesouro IPCA+ com Juros Semestrais 2050 (NTNB)      15/08/2050  5,41   R$33,60  R$3.360,49
Tesouro Prefixado 2020 (LTN)                        01.01.2020 8,38 р. 33,85 р. 846,45 р.
Tesouro Prefixado 2023 (LTN)                        01.01.2023  10,20  R$30,58  R$611,76
Tesouro Prefixado com Juros Semestrais 2027 (NTNF)  01.01.2027 10,37 R $ 30,67 R $ 1,022,61
Tesouro Selic 2023 (LFT)                            01.03.2023  0,00   R$92,38  R 9,238,83

Я вставил xmlstarlet format --recover --html 2>/dev/null потому что HTML с этого URL недействителен.


Увидеть: xmlstarlet select --help, man paste а также man column

Другие вопросы по тегам