次の形式の行を含むMedical.csv
ファイルがあります。
field: 'participation.type', displayName: 'program_type', type: 'String',path:'participation'
field: 'participation.program', displayName: 'program_name', type: 'String',path:'participation'
bashスクリプトを記述して、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
fi
echo "<tr><td>${INPUT//,/</td><td>}</td></tr>" ;
done < Medical.csv ;
echo "</table>"
使用されている正規表現の説明はsed
です:
:[^,]*(,|$)
これは: 'participation.type',
および:'participation'\n
に一致します($
は正規表現の入力/行の終わりを意味します)。
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
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>
私はそれがこの質問に対する遅い回答であることを知っていますが、bashコマンドの出力をhtmlテーブル形式に変換するための解決策を探すのに役立ちます。これを行うために利用できる簡単なスクリプトがあります: https://sourceforge.net/projects/command-output-to-html-table/ これを使用して、任意のコマンド出力またはファイルを素敵なhtmlテーブル形式。