将 csv 文件(由数据库查询生成)转换为 html,并根据列值对表进行颜色编码

将 csv 文件(由数据库查询生成)转换为 html,并根据列值对表进行颜色编码

(使用 Shell 脚本)需要从 CSV 文件生成 html 报告,该文件是数据库查询的输出,然后根据列值对其进行颜色编码。例如,从给定的 CSV 文件中,如果“status%”列下的任何单元格小于 80,则应以红色背景突出显示,任何内容 >=90 绿色。我尝试使用 awk,但我搞乱了 for环形。

CSV 文件类似于

Status%,Status Message,date 0f examination,type of exam,subject
75, success, 13-09-2013,mid term,physics
90, success, 15-09-203, mid term, Maths
100, success, 17-09-2013, term, biology
100, success, 17-09-2013, term, SST

添加代码

awk '
BEGIN {     
print "<html><body></br></br>The report provides overall Percentage Secured in the given subjects.</br></br></br>"
print "<table border=1 cellspacing=1 cellpadding=1>"
        } 
{
print "<tr>"
for ( i = 1; i <= NF; i++ )
{                                                    
if ($i <=75 )
  print "<td> <b><FONT COLOR=RED FACE="verdana"SIZE=2 ></b>"  $i  "</td>"
else
  if ($i >=90 && $i =100)
print "<td> <b><FONT COLOR=GREEN FACE="verdana"SIZE=2 ></b>"  $i  "</td>"
 else
print "<td> <FONT COLOR=YELLOW  FACE="verdana"SIZE=2 >" $i "</td>"
print "</tr>"
}
END { print "</table></body></html>"
}

'  /Reports/output/Output.html | sendmail -t

答案1

您有一个良好的开端,但出现了一些基本的 HTML 错误,例如从未关闭标记<FONT>。在您的脚本中使用它awk应该会让您接近您正在寻找的内容:

BEGIN {
  print "<html><body></br></br>The report provides overall Percentage Secured in the given subjects.</br></br></br>"
  print "<table border=1 cellspacing=1 cellpadding=1>"
}

NR==1 {
  # Header row
  print "<tr>"

  for ( i = 1; i <= NF; i++ ) {
    print "<td><b>"$i"</b></td>"
  }
  print "</tr>"
}

NR>1 {
  # Data rows
  print "<tr>"
  color="RED"
  if( $i > 80 ) {
    color="YELLOW"
  }
  if( $i > 90 ) {
    color="GREEN"
  }
  print "<td><b><FONT COLOR=\""color"\" FACE=\"verdana\" SIZE=2>"$1"</b></FONT></td><td>"$2"</td><td>"$3"</td><td>"$4"</td><td>"$5"</td>"
  print "</tr>"
}
END {
  print "</table></body></html>"
}

您可以按原样内联运行它,也可以将其放入自己的文件中(例如reportgen.awk,然后使用awk -f reportgen.awk /path/to/inputfile > outputfile.html.

相关内容