【发布时间】:2014-09-24 04:21:40
【问题描述】:
如何使用 awk 比较时间。我一直在尝试使用以下方法,但失败了。
只要“滞后”超过值“24:00:00”,就应打印以下文件中的第 4 列。但就我而言,只有 2717:33:54 被打印出来。应该在哪里打印所有行。
bash-4.2$ cat test
Source Destination State Lag Status
Data1 Test:/data1 Complted 1239:30:37 Quiescing
Data2 Test:/data2 Complted 1239:30:13 Idle
Data3 Test:/data3 Complted 1208:37:21 Idle
Data4 Test:/data4 Complted 1208:36:46 Idle
Data5 Test:/data5 Complted 1239:29:41 Idle
Data6 Test:/data6 Complted 1239:29:26 Idle
Data7 Test:/data7 Complted 1239:28:52 Idle
Data8 Test:/data8 Complted 2717:33:54 Quiescing
threhold=24:00:00
cat test | awk -v threshold=$threshold '$4 > threshold'
Source Destination State Lag Status
Data8 Test:/data8 Complted 2717:33:54 Quiescing
【问题讨论】:
-
@jaypal sn-p 中的变量名有错字。
threhold在分配线上。这会将我的输出更改为我更正时得到的输出。话虽如此,我不知道 awk 将如何比较这些字段。糟糕,我会猜。大概是字符串长度,然后是位置字符值。它绝对不会做的是将它们计算为时间。 -
@EtanReisner 啊,我只是复制粘贴。
-
awk不是特别适合使用日期/时间结构 - 它会将您的字段视为字符串,而不是您理解的间隔;因此,它正在进行字典(即字典顺序)比较。您可能想尝试python或perl以获得更好的日期/时间处理功能。 -
或使用具有内置日期/时间函数的 GNU awk,但对于这种琐碎的情况,这不是必需的。