【问题标题】:Grep file when $1 with format "hh:mm:ss" is between a range格式为“hh:mm:ss”的 $1 位于范围之间时的 Grep 文件
【发布时间】:2013-10-26 04:01:30
【问题描述】:

我想做的是,当每行中的第一个元素(格式为“hh:mm:ss”)在两个小时之间时,找出我文件中的所有条目

文件格式:

14:40:00 user1 load xxxx xxxx xxxxx
14:40:02 user2 change xxx xxx xxxxx
15:03:04 user1 change xxx xxx xxxxx
so on...

我想获取 14:40:00 到 15:00:00 之间的所有条目。

我想用下面的命令来做,但我不知道如何用 fiter 来做。

cat app.log | grep change | awk '{print $1 if .....}' 

之后我想打印整行。有人可以告诉我如何在命令行中进行条件过滤吗?

谢谢。

【问题讨论】:

    标签: bash shell scripting awk grep


    【解决方案1】:

    这可以是一种方式:

    $ awk -F: '($1==14 && $2>=40) || ($1==15 && $2==0)' file
    14:40:00 user1 load xxxx xxxx xxxxx
    14:40:02 user2 change xxx xxx xxxxx
    

    我也看到你在抱怨change。你可以一起做:

    $ awk -F"[: ]" '/change/ && (($1==14 && $2>=40) || ($1==15 && $2==0))' app.log
    14:40:02 user2 change xxx xxx xxxxx
    

    说明

    • -F"[: ]" 设置空格或: 作为字段分隔符。并非完全必要,因为您可以只使用 -F:,但如果您愿意,它允许您“玩”其他字段。
    • '($1==14 && $2>=40) || ($1==15 && $2==0)' 是可能匹配的条件:hour 14 + minute >=40hour 15 + minute == 0

    【讨论】:

    • 太棒了!!这正是我想要的!非常感谢。
    【解决方案2】:
    awk '"14:40:00" <= $1 && $1 <= "15:00:00"' app.log
    

    如果你想动态传递开始和结束时间:

    start=14:40:00 
    end=15:00:00
    awk -v start=$start -v end=$end 'start <= $1 && $1 <= end' app.log
    

    如果如您所见,您也只想要“更改”事件:

    awk -v start=$start -v end=$end 'start <= $1 && $1 <= end && /change/' app.log
    awk -v start=$start -v end=$end 'start <= $1 && $1 <= end && $3 == "change"' app.log
    

    【讨论】:

    • 好!不知道awk 允许这样的字符串比较。
    【解决方案3】:

    使用 perl 会是:

    perl -n -e '/(\d\d:\d\d:\d\d) \S+ (\S+) / && $2 eq "change" && $1 ge "14:40:00" && $1 le "15:00:00" && print $_' < app.log
    

    或者更易读:

    perl -n -e '/(\d\d:\d\d:\d\d) \S+ (\S+) / ' \
        -e '&& $2 eq "change" ' \
        -e '&& $1 ge "14:40:00" ' \
        -e '&& $1 le "15:00:00" ' \
        -e '&& print $_' < app.log
    

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 2012-02-10
      • 2011-10-28
      相关资源
      最近更新 更多