Datetime awk;比较时间——strftime的困惑行为

Datetime awk;比较时间——strftime的困惑行为,datetime,awk,gawk,strftime,Datetime,Awk,Gawk,Strftime,在Win-7 PC上的UNXUTILS中使用GNU Awk(gawk)。这个问题涉及strftime(.)以及使用它的时间比较 因为我有一个类似的问题,所以我一直关注讨论。在金融市场数据中,我有一个日期时间字符串($25),称为“03-APR-2006 09:55:25”(so time=substr($25,13,8)),我的目标是统计14:00:00(下午2点)之后出现的记录(尤其是订单取消记录) 在我的代码中有一行 { if ($3==3) { { ++CK_NR} { ++CO_

在Win-7 PC上的UNXUTILS中使用GNU Awk(gawk)。这个问题涉及strftime(.)以及使用它的时间比较

因为我有一个类似的问题,所以我一直关注讨论。在金融市场数据中,我有一个日期时间字符串($25),称为“03-APR-2006 09:55:25”(so time=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“{打印时间(\'09:55:25\”>(\'14:00:00\”)”

是否产生“0”和

gawk“{print(strftime(\'09:55:25\”)<(\'14:00:00\”)}”

不产生“1”。gnuawk手册()提供的关于进行有意义的比较所需的信息很少。刚才尝试了上述删除“strftime”的方法,甚至是从LHS中删除,如下所示

目瞪口呆“{打印(\'09:55:25\”>(\'14:00:00\”)”

目瞪口呆“{打印(\'09:55:25\”>(\'14:00:00\”)”

得到了同样的结果。我希望确保得到正确的真/假结果,因为GAWK是在比较时间,而不是它在进行字符串比较时使用的其他内部规则(导致有限测试只是巧合)。有人能解决这个难题吗?谢谢最好的


Murgie

您似乎在使用字符串比较。通过比较每个字符串的第一个字符,然后比较每个字符串的第二个字符,依此类推。因此,“10”小于“9”,因为“1”的ASCII值小于“0”,请参见和


如果您想对格式为“xx:yy:zz”(例如“10:22:45”)的字符串进行数字比较,那么您可以尝试先使用
gsub(/:/,“”,str)

将该字符串转换为数字。您正在使用字符串比较。有关更多信息,请参阅我无意进行字符串比较。但是时间的比较。strftime(.)给了我一个合理的答案,但让我困惑的是,即使它只用于不等式的一个方面,它也会这样做!!这让我担心这是否仅仅是巧合。但我会很快阅读你的推荐信。谢谢