Konvertieren Sie CSV in eine HTML-Tabelle


8

Ich habe eine Medical.csvDatei mit Zeilen im folgenden Format:

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

Ich möchte ein schreiben Bash - Skript , es mit zu HTML - Tabelle zu konvertieren field, displayNameund typeals Header dynamisch.

Die Csv2HtmlConverter.sh(Inspiriert von Antwort bei Konvertieren von CSV in HTML-Tabelle mit ) ist

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

Das Ergebnis für obigen Skript ist als unten die feine zu einem gewissen Grad, aber ich mag hinzufügen <th>field</th>, <th>displayName</th>dynamisch.

<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>

Antworten:


12

Dies wird den Trick machen:

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>"

Die Erklärung des verwendeten regulären Ausdrucks lautet sed:

:[^,]*(,|$)

Visualisierung regulärer Ausdrücke

Dies stimmt mit : 'participation.type',und überein :'participation'\n( $bedeutet das Ende der Eingabe / Zeile in Regex).


Funktioniert perfekt nach meinen Anforderungen. Respekt.
Prayagupd

1
Bilder mit freundlicher Genehmigung von debuggex.com
Stéphane Chazelas

0

Hier ist ein Shell-Skript, das eine CSV in HTML konvertiert:

http://giantdorks.org/alain/bash-and-awk-to-convert-delimited-data-csv-tsv-etc-to-html-tables/

Um Ihren Anwendungsfall speziell anzusprechen.

Angenommen, die folgende ursprüngliche CSV:

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

Möglicherweise möchten Sie es leicht ändern:

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

So erstellen Sie die folgende bereinigte Version:

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

Wenn Sie dann das zuvor mit der ursprünglichen CSV verknüpfte Skript ausführen, wird der folgende HTML-Code erstellt:

$ 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>

Wenn Sie es auf dem bereinigten CSV ausführen, wird Folgendes erzeugt:

$ 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>

1
Das Skript scheint auf den ersten Blick nicht mit zitierten Zelleninhalten umzugehen (die sogar mehrere Zeilen umfassen können).
Anthon

Richtig, das tut es nicht. Könnte sicherlich zitierte Zellenbehandlung hinzufügen oder einfach mit etwas vorverarbeiten wie:sed 's/"//g' input
Alain Kelder

Oder wenn Daten auch doppelte Anführungszeichen enthalten:sed 's/^"//;s/"$//;s/","/,/g;' input.csv
Alain Kelder

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

Können Sie bitte Ihren Code zur besseren Lesbarkeit neu formatieren? Und fügen Sie einige Kommentare hinzu ...
Romeo Ninov

0

Ich weiß, dass es eine späte Antwort auf diese Frage ist, aber sie wird denjenigen helfen, die nach einer Lösung suchen, um die Ausgabe des Bash-Befehls in das HTML-Tabellenformat zu konvertieren. Hierzu steht ein einfaches Skript zur Verfügung: https://sourceforge.net/projects/command-output-to-html-table/, mit dem jede Befehlsausgabe oder -datei in ein schönes HTML-Tabellenformat konvertiert werden kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.