Converter csv em tabela HTML

6

Eu tenho um arquivo Medical.csv com linhas do seguinte formato,

    field: 'participation.type', displayName: 'program_type', type: 'String',path:'participation'
    field: 'participation.program', displayName: 'program_name', type: 'String',path:'participation'

Eu quero escrever um script bash para convertê-lo em tabela HTML com field , displayName e type como cabeçalhos dinamicamente.

A conversão de Csv2HtmlConverter.sh (Inspirado por resposta em Converter csv para html usando ) é

    echo "<table>" ;
    while read INPUT ; do
            echo "<tr><td>${INPUT//,/</td><td>}</td></tr>" ;
    done < Medical.csv ;
    echo "</table>"

O resultado do script acima é o seguinte, o que é aceitável até certo ponto, mas desejo adicionar <th>field</th> , <th>displayName</th> dinamicamente.

<table>
<tr><td>field: 'participation.type'</td><td> displayName: 'program_type'</td><td> type: 'String'</td><td>path:'participation'</td></tr>
<tr><td>field: 'participation.program'</td><td> displayName: 'program_name'</td><td> type: 'String'</td><td>path:'participation'</td></tr>
</table>
    
por prayagupd 17.12.2013 / 07:34

4 respostas

10

Isso fará o truque:

echo "<table>" ;
print_header=true
while read INPUT ; do
  if $print_header;then
    echo "<tr><th>$INPUT" | sed -e 's/:[^,]*\(,\|$\)/<\/th><th>/g'
    print_header=false
  fi
  echo "<tr><td>${INPUT//,/</td><td>}</td></tr>" ;
done < Medical.csv ;
echo "</table>"

Explicação da regex usada é sed :

:[^,]*(,|$)

Isso corresponderá a : 'participation.type', e :'participation'\n ( $ significa o final da entrada / linha na regex).

    
por 17.12.2013 / 11:24
0

Aqui está um script de shell que converterá um arquivo CSV em HTML:

link

Para abordar seu caso de uso especificamente.

Assumindo o seguinte CSV original:

$ cat original.csv 
field: 'participation.type', displayName: 'program_type', type: 'String',path:'participation'
field: 'participation.program', displayName: 'program_name', type: 'String',path:'participation'

Você pode querer modificá-lo um pouco:

$ echo field,displayName > modified.csv
$ awk -F"'" 'OFS="," {print$2,$4}' original.csv >> modified.csv

Para produzir a seguinte versão de limpeza:

$ cat modified.csv 
field,displayName
participation.type,program_type
participation.program,program_name

Em seguida, a execução do script vinculado anteriormente ao CSV original produzirá o seguinte HTML:

$ csv2htm.sh --head original.csv 
  <table>
    <thead>
      <tr>
        <th>field: 'participation.type'</th>
        <th> displayName: 'program_type'</th>
        <th> type: 'String'</th>
        <th>path:'participation'</th>
      </tr>
    </thead>
      <tr>
        <td>field: 'participation.program'</td>
        <td> displayName: 'program_name'</td>
        <td> type: 'String'</td>
        <td>path:'participation'</td>
      </tr>
  </table>

Executá-lo no CSV limpo produziria:

$ csv2htm.sh --head modified.csv
  <table>
    <thead>
      <tr>
        <th>field</th>
        <th>displayName</th>
      </tr>
    </thead>
      <tr>
        <td>participation.type</td>
        <td>program_type</td>
      </tr>
      <tr>
        <td>participation.program</td>
        <td>program_name</td>
      </tr>
  </table>
    
por 17.02.2014 / 20:41
0
host='hostname'
now='date +"%d-%b-%y"'
now='echo $now| tr '[a-z]' '[A-Z]''
yest='TZ=CST+24 date +%d-%b-%y'
yest='echo $yest| tr '[a-z]' '[A-Z]''
sub="Jobs-$host-$now-HealthReport"

if [ -s jobs.csv ]
then
awk 'BEGIN{
FS=","
print "<HTML>""<TABLE border=1 width='100%' align='centre' ><tr bgcolor='#000080'><TH><FONT COLOR='#FFFFFF'>HSCR-DBMSJOB HEALTH REPORT  </TH></FONT>"
print "</TABLE>"
print "<HTML>""<TABLE border=1 width='100%' align='centre' bgcolor='#C6C6C6' BORDERCOLOR='#CCFF00' ><tr bgcolor='#5F9EA0'><TH>SUMMARY</TH>"
print "</TABLE>"
print "<HTML><TABLE border=2 width='100%' align='centre' BORDERCOLOR='#330000' ><trbgcolor='#FFFFCC'>"

print "<TH>BROKEN</TH><TH>SCHEMA_USER</TH><TH>JOB_ID</TH><TH>LAST_DATE</TH><TH>LAST_SEC</TH><TH>THIS_DATE</TH>"
print "<TH>THIS_SEC</TH><TH>NEXT_DATE</TH><TH>NEXT_SEC</TH><TH>NAME</TH>"
}


{
    printf "<TR>"
            for(i=1;i<=10;i++){

                      if(i == 1 && $i == "N" || i == 4 && $i == n || i == 4 && $i == y )
                    {
                            printf "<TD bgcolor='#75923C'>%s</TD>", $i
                    }
                    else if(i == 1 && $i == "Y" || i == 4 && $i != n && $i != y)
                    {
                            printf "<TD bgcolor='#FF0000'>%s</TD>", $i
                    }
                    else
{
                            printf "<TD>%s</TD>", $i
}
            }
            print "</TR>"
    }

END{

            print "</TABLE></BODY></HTML>"
    }' y="$yest" n="$now" jobs.csv > jobstatus-$host-$now.html
else
echo "file not found"

fi
    
por 20.03.2017 / 09:43
0

Eu sei que é uma resposta tardia para esta pergunta, mas vai ajudar aqueles pesquisando por uma solução, para converter a saída do comando bash para o formato de tabela html. Existe um script fácil disponível para fazer isso em: link que pode ser usado para converter qualquer comando de saída ou arquivo para um formato de tabela html agradável. Espero que isso ajude.

    
por 29.06.2018 / 07:49