如何在将 csv 转换为 html 时使用 awk 仅更改一列的背景颜色

如何在将 csv 转换为 html 时使用 awk 仅更改一列的背景颜色

我已经编写main.awkcolor.awk使用条件颜色编码将 CSV 转换为 html。

脚本可以工作,但问题是,当条件满足时,它会为整行(所有列)着色。

我只想更改用于检查条件的相应列的背景颜色,而不是 enir 行(不是所有列)。

命令运行如下。

awk -f color.awk -f main.awk employee_data.csv >> employee_data.html

1)我的 color.awk 如下所示,$1 是第一列,根据值,它将颜色值返回到 main.awk

function check() {
        if (( $1 = 8613)) return "green"
        if (( $1 > 8613)) return "red"
        if (( $1 < 8613)) return "red"
}

2)我的main.awk如下

main.awk 使用此行调用 check 函数从 color.awk 获取颜色。颜色=检查();整个脚本如下。

BEGIN{

FS="|"
  print "<html><body>"
  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>"

  for ( i = 1; i < NF; i++ ) {

  color=check( );

print "<td bgcolor=\""color"\"><b><FONT  FACE=\"verdana\" SIZE=2>"$i"</b></FONT></td>"
#print "<td ><b><FONT  bgcolor=\""color"\" FACE=\"verdana\" SIZE=2>"$i"</b></FONT></td>"
}
  print "</tr>"

}
END {
  print "</table></body></html>"
}

答案1

由于 check 函数硬编码了第 1 列,因此在 for 循环中,而不是

color=check( );

你应该做

color = i == i ? check() : "someDefaultColor"

或者,传递i给检查函数 ( check(i)),检查函数测试传递的值是否为1

相关内容