Преобразование таблицы csv в HTML

У меня есть файл Medical.csv со строками следующего формата,

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

Я хочу написать сценарий bash, чтобы преобразовать его в таблицу HTML с field , displayName и динамически type как заголовки.

Csv2HtmlConverter.sh (Вдохновленный ответом на использование Convert csv для html-таблицы )

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

Результат для сценария выше, как показано ниже, который в какой-то мере хорош, но я хочу добавить <th>field</th> , <th>displayName</th> динамически.

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

3 Solutions collect form web for “Преобразование таблицы csv в HTML”

Это сделает трюк:

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

Объяснение используемого регулярного выражения – sed :

 :[^,]*(,|$) 

Визуализация регулярных выражений

Это будет соответствовать : 'participation.type', и :'participation'\n ( $ означает конец ввода / строки в регулярном выражении).

Вот сценарий оболочки, который преобразует CSV в HTML:

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

Для конкретного случая использования.

Предполагая следующее исходное CSV:

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

Вы можете немного изменить его:

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

Чтобы создать следующую очищенную версию:

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

Затем, запустив скрипт, связанный ранее с исходным CSV, вы получите следующий 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> 

Запустив его на очищенном CSV, вы получите:

 $ 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> 
 host=`hostname` now=`date +"%d-%b-%y"` now=`echo $now| tr '[az]' '[AZ]'` yest=`TZ=CST+24 date +%d-%b-%y` yest=`echo $yest| tr '[az]' '[AZ]'` 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 к host=`hostname` now=`date +"%d-%b-%y"` now=`echo $now| tr '[az]' '[AZ]'` yest=`TZ=CST+24 date +%d-%b-%y` yest=`echo $yest| tr '[az]' '[AZ]'` 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 в host=`hostname` now=`date +"%d-%b-%y"` now=`echo $now| tr '[az]' '[AZ]'` yest=`TZ=CST+24 date +%d-%b-%y` yest=`echo $yest| tr '[az]' '[AZ]'` 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 с host=`hostname` now=`date +"%d-%b-%y"` now=`echo $now| tr '[az]' '[AZ]'` yest=`TZ=CST+24 date +%d-%b-%y` yest=`echo $yest| tr '[az]' '[AZ]'` 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 
  • Добавить кавычки и новый разделитель вокруг слов, разделенных пробелами
  • Как извлечь строку между двумя шаблонами с помощью sed в Linux, а второй шаблон повторяет больше строк в файле
  • дифференцируя два файла и получая уникальный результат в третьем
  • sed -e 's / ^ //' не работает для первой строки
  • grep для извлечения подстроки из огромной строки
  • Создание файлов из шаблонов, замещение в середине других слов
  • «Скобки не сбалансированы», хотя я избежал этого?
  • Наложение символа между повторяющимися символами
  • Как сгладить журналы для списка шаблонов и сделать из него отчет?
  • Как создать список, сгенерированный md5deep в алфавитном порядке относительных путей?
  • Извлечение нескольких экземпляров текста между двумя словами, включая стартовое слово, но исключающее слово
  • Linux и Unix - лучшая ОС в мире.