我想编写一个awk脚本来显示系统日期并将其传递给HTML页面。
这是我写的AWK脚本 date.awk:
BEGIN { "date" | getline; system("date >> myfile.html") }
从上面awk
script
,我可以附加日期,但只想显示更新日期一次。刷新页面时也会打印过去的写入日期值。谁能告诉我哪里出错?
当我刷新浏览器时,我的当前日期应该出现在html页面中。每当我运行awk script
时,都必须在我的html页面中更新新的系统日期。
myfile.html
<table>
<tr><td>Chocolates</td><td>Hersheys</td></tr>
<tr><td>Biscuits</td><td>Oreo</td></tr>
</table>
使用AWK脚本在此处打印日期。
答案 0 :(得分:0)
myfile.html显示的内容不是格式良好的HTML文档。简单地将日期附加到格式良好的HTML文档上并不是一个可行的解决方案。通常你需要围绕日期的html和body标签。下面的解决方案不适用于格式良好的HTML文档,但这似乎不是问题所要求的。这个解决方案实际上只能指向使用awk来过滤旧日期,然后再追加另一个日期。
该脚本将数据附加到html文件,但不会删除以前附加的数据。有几种方法可以解决问题,但无论选择何种方法,解决方案都必须在追加新日期之前删除上一个日期。问题中提供的脚本片段非常简洁,难以形成一个能够考虑问题背景的答案,但这里有:
FILE="myfile.html"
awk \
-v DATE="`date`" \
-v FILE="${FILE}.new" \
'BEGIN \
{ PATT = gensub(/[[:alpha:][:digit:]]/, ".", "g", DATE) }
$0 !~ ("^" PATT "$") \
{ print >FILE }
END \
{ print DATE > FILE; close(FILE) }
' "${FILE}"
mv "${FILE}.new" "${FILE}"
PATT是从样本日期构造的正则表达式。您可以通过具体了解日期的实际情况来制作更好的模式。如果date
输出“Wed Apr 29 09:23:22 CDT 2015”,PATT将是“...... ...... ......:...... ...... ......”。这是一个可以改进的粗略模式,但仍然可能只与附加日期相匹配。
基本上,每个与PATT中的日期模式不匹配的行都会输出到名为myfile.html.new的新文件中。将所有旧行复制到新文件后,将附加新日期,然后新文件将替换旧文件。人们希望在此脚本运行时没有其他脚本可以更新myfile.html。