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