我有一个名为“main.ksh”的脚本,它返回“output.txt”文件,我正在通过邮件发送该文件。(列表包含 50 多条记录,例如我只给出 4 条记录)
我得到的邮件输出是:
日期 |饲料名称 |文件名 |职位名称 |预定_TIME|时间戳|大小(MB)|计数|状态 |
12 月 17 日 INVEST_AI_FUNDS_FEED amlfunds_iai_20161217.txt gdcpl3392_uxmow080_ori_inv_ai TUE-SAT 02:03 0.4248 4031 On_Time
12 月 17 日 INVEST_AI_SECURITIES_FEED amltxn_iai_20161217.txt gdcpl3392_uxmow080_ori_inv_ai TUE-SAT 02:03 0.0015 9 On_Time
12 月 17 日 INVEST_AI_CONNECTED_PARTIES_FEED amlbene_iai_20161217.txt gdcpl3392_uxmow080_ori_inv_ai TUE-SAT 02:03 0.0001 1 No_Records
我正在为 Delayed、On_Time 和 No_Records 字段实现着色,我编写了下面的脚本,它给出了底部输出(输出是正确的,但没有空格分隔)。
awk 'BEGIN {
print "<html>" \
"<body bgcolor=\"#333\" text=\"#f3f3f3\">" \
"<pre>"
}
NR == 1 { print $0 }
NR > 1 {
if ($NF == "Delayed") color="red"
else if ($NF == "On_time") color="green"
else if ($NF == "No_records") color="yellow"
else color="#003abc"
$NF="<span style=\"color:" color "\">" $NF "</span>"
print $0
}
END {
print "</pre>" \
"</body>" \
"</html>"
}
' output.txt > output.html
完美着色的输出:
|日期 |饲料名称 |文件名 |职位名称 |预定_TIME|时间戳|大小(MB)|计数|状态 |
12 月 17 日 INVEST_AI_FUNDS_FEED amlfunds_iai_20161217.txt gdcpl3392_uxmow080_ori_inv_ai On_Time
12 月 17 日 INVEST_AI_SECURITIES_FEED amltxn_iai_20161217.txt gdcpl3392_uxmow080_ori_inv_ai On_Time
12 月 17 日 INVEST_AI_CONNECTED_PARTIES_FEED amlbene_iai_20161217.txt gdcpl3392_uxmow080_ori_inv_ai No_Records
有 4 列被自动跳过。你能帮我解决这个问题吗?非常感谢!
最佳答案
当你的代码执行这个
$NF="<span style=\"color:" color "\">" $NF "</span>"
print $0
输入行被重建,因此两个连续字段之间的多个空格被替换为仅一个空格。
我的解决方案将输入行复制到变量中,删除最后一个字段(更改变量的值,而不是输入行),添加修改后的最后一个字段并打印:
Dummy=$0
sub("[^ ]+$","",Dummy) # removes last field
Dummy=Dummy "<span style=\"color:" color "\">" $NF "</span>"
print Dummy
最好的问候
更新:最后两行代码可以这样减少:
print Dummy "<span style=\"color:" color "\">" $NF "</span>"
关于具有顺序输出的 unix shell 脚本中的 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40738933/