我已经编写main.awk
并color.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
。