在Win-7 PC上使用UNXUTILS中的GNU-Awk(gawk)。这个问题涉及strftime(。)以及使用它的时间比较。
跟随how to compare strftime values的讨论,因为我遇到了类似的问题。在金融市场数据中,我有一个日期时间字符串(25美元)给出为“03-APR-2006 09:55:25”(所以时间= substr($ 25,13,8))我的目标是计算记录(特别是订单取消记录)在14:00:00(下午2点)之后进入。
在我的代码中,我有一行读取
{ if ($3==3) {
{ ++CK_NR}
{ ++CO_NR[$4, substr($25, 1, 11)] }
{ if (strftime(substr($25, 13, 8)) > ("14:00:00"))\
{
{ ++CK_LATE_NR }
{ ++CO_LATE_NR[$4, substr($25, 1, 11)] }
}
}
}}
刚才意识到我使用的不平等 - if(strftime(substr($ 25,13,8))>(“14:00:00”)) - 只有一个字符串在RHS中,我没有将此字符串作为另一个strftime(。)的参数。 令人费解的是,它没有给我一个错误。
我担心虽然它没有产生任何错误,并且代码已经运行,但也许它给了我一些不同于我对代码的意图。在命令提示符窗口中,执行
gawk“{print(strftime(\”09:55:25 \“)>(\”14:00:00 \“))}”
确实产生“0”和
gawk“{print(strftime(\”09:55:25 \“)<(\”14:00:00 \“))}”
确实产生“1”。 GNU Awk手册(http://www.gnu.org/software/gawk/manual/gawk.html#Time-Functions)几乎没有提供有关有意义比较所需内容的信息。刚刚尝试了上面的删除“strftime”甚至来自LHS,如
gawk“{print((\”09:55:25 \“)>(\”14:00:00 \“))}”
和
gawk“{print((\”09:55:25 \“)>(\”14:00:00 \“))}”
并得到了相同的结果。我想确保我得到正确的True / False结果,因为GAWK正在比较时间,而不是它用于进行字符串比较的其他内部规则(导致有限测试只是巧合)。有人能解决这个难题吗?谢谢。最好,
Murgie
答案 0 :(得分:1)
您似乎正在使用字符串比较。通过比较每个字符串的第一个字符,然后比较每个字符串的第二个字符来比较字符串,依此类推。因此," 10"小于" 9",因为" 1"的ASCII值小于" 0",请参阅http://www.gnu.org/software/gawk/manual/gawk.html#Variable-Typing和http://en.wikibooks.org/wiki/An_Awk_Primer/Search_Patterns_%282%29#Logic_Operators
如果要对表单上的字符串进行数字比较" xx:yy:zz" (例如" 10:22:45")然后您可以尝试使用gsub(/:/,"",str)