awk脚本系统日期和管道到html页面?

时间:2015-04-27 00:07:13

标签: html awk

我想编写一个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脚本在此处打印日期。

1 个答案:

答案 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。