Suponha que você tenha alguns arquivos com valores separados por virgula (CSV) e deseja apresentá-los para alguém. Você pode abrir um por um no seu programa de editar planilhas, arrumar as colunas para que os dados fiquem visíveis, converter ponto pra vírgula, juntar as tabelas em uma página só para comparação, etc ou criar um script que faça isso para você.
Uma forma de apresentar os dados em tabelas pode ser através de HTML. Essa linguagem, aliada ao CSS, pode deixar um resultado bem apresentável e de fácil compreensão de quem vê. Como é muito chato montar uma tabela HTML “na mão” sem um modelo, você pode usar um shell script para gravar um arquivo HTML contendo a estrutura básica de marcação do HTML e as propriedades de estilo do CSS.
O shell script do exemplo a seguir cria um arquivo HTML com título, subtítulo, insere imagem e cria tabela com cabeçalho, com todos os elementos centralizados. Por fim, converte o HTML em PDF (opcional).
#!/bin/bash # Script para fazer tabelas em HTML com textos a partir de arquivos CSV e gravar também relatório em PDF DIR=$(readlink -f -- $0 | awk -F "/" 'sub(FS $NF,x)')/dados file_in=$DIR/tabela.csv file_out=$DIR/tabela_relatorio.html dia=$(date +%Y-%m-%d) echo "<html>" > $file_out echo "<head>" >> $file_out echo "<meta charset='UTF-8'>" >> $file_out echo "<style type='text/css'>" >> $file_out echo "table { margin-left: auto;margin-right: auto;}" >> $file_out echo "</style>" >> $file_out echo "</head>" >> $file_out echo "<Body>" >> $file_out echo "<h2 align='center'>Relatorio</h2>" >> $file_out echo "<h3 align='center'>(gerado em $dia)</h3></br>" >> $file_out echo "</br>" >> $file_out # Ler CSV e montar tabela HTML echo "<table>" >> $file_out print_header=true while read INPUT ; do if $print_header; then echo "<tr><th>${INPUT//,/</th><th>}</th></tr>" >> $file_out print_header=false else echo "<tr><td align='center'>${INPUT//,/</td><td align='center'>}</td></tr>" >> $file_out fi done < $file_in echo "</table></br>" >> $file_out echo "</Body>" >> $file_out echo "</html>" >> $file_out echo "HTML feito" # Gerar arquivo PDF a partir de HTML wkhtmltopdf $file_out $DIR/relatorio.pdf echo "PDF feito"
Esse outro exemplo é um pouco mais complexo, pois imprime várias tabelas em um mesmo HTML. São arquivos de 4 lugares e 3 datas, totalizando 12 combinações – ou seja, 12 arquivos de entrada no formato CSV. O exemplo abaixo criar um arquivo de saída com as seguintes configurações:
- uma DIV (envolve) que contém todo o conteúdo a ser gravado;
- três DIVs (div_1, div_2 e div_3, uma ao lado da outra), cada uma com um título indicando a data (a do meio tem fundo cinza);
- cada DIV possui quatro tabelas (uma embaixo da outra), cada uma contendo o nome do lugar no próprio arquivo CSV;
- cada tabela possui um cabeçalho, que será impresso de modo diferente (“th” em vez de “td”).
As propriedades de estilo estão definidas no início do scripts para serem gravadas no arquivo de saída.
#!/bin/bash # Script para fazer tabelas em HTML a partir de arquivos CSV DIR=$(pwd) # Impressão de cabeçalho HTML/CSS echo "<html>" > $DIR/tabela.html echo "<style type='text/css'>" >> $DIR/tabela.html echo "#envolve { width: 100%;}" >> $DIR/tabela.html echo "#div_1 { float: left; text-align: center;}" >> $DIR/tabela.html echo "#div_2 { background-color: #F0F0F0; float: left; text-align: center;}" >> $DIR/tabela.html echo "#div_3 { float: left; text-align: center;}" >> $DIR/tabela.html echo "#clear { clear:both; }" >> $DIR/tabela.html echo "</style>" >> $DIR/tabela.html echo "<Body>" >> $DIR/tabela.html echo "<div id='envolve'>" >> $DIR/tabela.html # Inicialização de vetores para criar nomes dos arquivos CSV datas=("2001-06-01" "2007-01-01" "2014-01-01") subs=("Lugar1" "Lugar2" "Lugar3" "Lugar4") i=1 for data in "${datas[@]}"; do echo "<div id='div_"$i"'>" >> $DIR/tabela.html echo "Dados de "$data"" >> $DIR/tabela.html k=0 # Criar nomes de arquivos CSV a serem lidos for local in ${locais[@]}; do files[k++]=$DIR/$local"_"$data".csv" done # Ler cada arquivo CSV for file_in in "${files[@]}"; do echo "<table>" >> $DIR/tabela.html print_header=true # Gravar linhas da tabela while read INPUT ; do if $print_header; then echo "<tr><th>${INPUT//,/</th><th>}</th></tr>" >> $DIR/tabela.html print_header=false else echo "<tr><td align='center'>${INPUT//,/</td><td align='center'>}</td></tr>" >> $DIR/tabela.html fi done < $file_in echo "</table></br>" >> $DIR/tabela.html done i=$((i+1)) echo "</div>" >> $DIR/tabela.html done # Finalizar dotumento HTML echo "<div class='clear'></div>" >> $DIR/tabela.html echo "</Body>" >> $DIR/tabela.html echo "</html>" >> $DIR/tabela.html echo "HTML feito"
O script “faz_tabelas.sh” gera o arquivo de saída “tabela.html”, que pode ser aberto em qualquer navegador.
One comment