【问题标题】:awk to compare time field for 24 hours dataawk 比较 24 小时数据的时间字段
【发布时间】:2017-07-09 10:14:06
【问题描述】:

我有以下测试数据,并且我已经能够获取当前日期的数据, 如何比较从00:00:0108:00:00 获取数据的时间?

Test1   prog  02/20/2017  03:45:56 Success
Test2   prog  02/20/2017  05:21:38 Fail
Test3   prog  02/20/2017  09:35:36 Success
Test4   prog  02/19/2017  06:15:56 Fail
Test5   prog  02/18/2017  07:35:16 Active
Test6   prog  02/19/2017  03:45:56 Success

我做到了

a=`date +%m/%d/%Y`
awk -v a="$a" '$3==a' file

我不知道如何打破第四列,即 时间来比较它的时间范围。

【问题讨论】:

    标签: datetime awk text-processing


    【解决方案1】:
    a=$(date +%m/%d/%Y)
    
    awk -F":| *" -v a="$a" '$3==a {t=($4*60*60 + $5*60 + $6); if(t>=1 && t<=28800) print}' File
    

    使用:space sequence 作为字段分隔符。在这里,我将时间转换为秒并检查它是否在(包括)1s8hrs 之间。如果是,则打印该行。日期检查作为第一个过滤器完成 ($3==a)

    【讨论】:

    • 这个时间列也可以排序吗?
    • 如果日期列发生变化,是否有可能,因为它从行首搜索 a=$(date +%m/%d/%Y) ,找到后从下一个计算时间字段
    • @Sid:像这样:awk -F":| *" -v a="$a" '{i=0; while(++i&lt;=NF){if(match($i, a)){ t=($(i+1)*3600 + $(i+2)*60 + $(i+3)); if(t&gt;=1 &amp;&amp; t&lt;=28800) print}}}' File
    【解决方案2】:
    awk -v a=`date '+%m/%d/%Y'` '$3$4 ~ a"0[0-8]"' file
    

    上面给出了今天日期所需的行。

    如果你想要所有这些行,那么使用:

    awk '$4 ~ "0[0-8]"' file
    

    请注意,您必须根据您的时间范围修改正则表达式(~之后的字符串)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      相关资源
      最近更新 更多