Bash

將 csv 轉換為 HTML 表格

  • December 3, 2021

我有一個Medical.csv包含以下格式行的文件,

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

我想編寫一個bash 腳本以將其轉換為 HTML 表fielddisplayNametype動態地作為標題。

Csv2HtmlConverter.sh(靈感來自Convert csv to html table using的答案)是

   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>

這可以解決問題:

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
   continue
 fi
 echo "<tr><td>${INPUT//,/</td><td>}</td></tr>" ;
done < Medical.csv ;
echo "</table>"

使用的正則表達式的解釋是sed

:[^,]*(,|$)

正則表達式視覺化

這將匹配: 'participation.type',:'participation'\n$表示正則表達式中輸入/行的結尾)。

如果您有sqlite和命令行程序sqlite3,您可以執行該程序,然後:

.import --csv input.csv tmp
.mode html
.output output.html
select * from tmp;

您可能需要在生成的 HTML 文件中添加一些內容,例如

<!doctype html>
<table>

以便被瀏覽器辨識。

作為 bash 腳本,這可能是

#!/bin/bash
TMP=`mktemp csv.XXXXX`
trap "rm -f $TMP" EXIT
(echo .import "$1" tmp; echo .mode html; echo .output "$TMP"; echo 'select * from tmp;' ) | sqlite3
awk 'BEGIN{print "<!doctype html><table>"};{print}' < "$TMP" > "$2"

引用自:https://unix.stackexchange.com/questions/105501