Bash脚本实现HTML表格仅纯零值标红的问题求助
解决SQL结果转HTML表格并标红严格等于0的单元格
场景1:SQL结果文件每行一个值(共15行,对应5行3列表格)
用Awk精确判断每个值是否严格等于0,同时处理前后空白避免误判,命令如下:
awk ' BEGIN { print "<!DOCTYPE html>" print "<html><body>" print "<table border=\"1\">" count = 0 } { # 去除值前后的空白字符 val = $0 gsub(/^[[:space:]]+|[[:space:]]+$/, "", val) # 严格判断是否等于0 if (val == "0") { cell = "<td style=\"color:red\">0</td>" } else { cell = "<td>" val "</td>" } cells = cells cell count++ # 每3个单元格组成一行 if (count % 3 == 0) { print "<tr>" cells "</tr>" cells = "" } } END { print "</table>" print "</body></html>" }' query_modified_2.txt > output_2.html
场景2:SQL结果文件每行3个值(共5行,直接对应表格的5行)
如果你的SQL结果是每行用分隔符(比如制表符、逗号)分隔的3个值,调整Awk的字段分隔符即可,示例(假设分隔符是制表符):
awk -F'\t' ' BEGIN { print "<!DOCTYPE html>" print "<html><body>" print "<table border=\"1\">" } { print "<tr>" for (i=1; i<=3; i++) { val = $i gsub(/^[[:space:]]+|[[:space:]]+$/, "", val) if (val == "0") { print "<td style=\"color:red\">0</td>" } else { print "<td>" val "</td>" } } print "</tr>" } END { print "</table>" print "</body></html>" }' query_modified_2.txt > output_2.html
问题原因说明
- 之前Awk的if语句未生效:大概率是没有处理字段前后的空白字符(比如值是
0而非0),或者字段分隔符设置错误导致没正确取到目标值。 - sed命令误标含0的字符:sed是基于正则的部分匹配,直接替换
0会命中所有包含0的字符串(比如208里的0),无法实现“严格等于0”的判断。
内容的提问来源于stack exchange,提问作者KarimZ
相关产品推荐
相关产品推荐

