如何使用Bash在两个时间戳之间搜索文件中的行

her*_*der 8 bash

在bash中,我正在尝试读取日志文件,并且只打印具有两个特定时间之间的时间戳的行.时间格式为hh:mm:ss.例如,我会搜索在12:52:33到12:59:33之间的行.

我想使用正则表达式因为我可以在grep函数中使用它.

每个日志都以some_nr 2014-05-15 21:58:00,000000 rest_of_line.

我的解决方案给了我1分钟的保证金.我剪掉了ss所有的线条hh:mm:[0-9]{2}.2美元的格式filename_hh:mm:;例如:"24249_16:05:;24249_16:05:;24249_16:07:;24249_16:07:;24249_16:08:"

我的代码:

B=$2  

for line in ${B//;/ } ;
do  
    TENT=`echo $line | awk '{split($0,numbers,"_"); print numbers[1]}'`"_logs.txt"
    TIME=`echo $line | awk '{split($0,numbers,"_"); print numbers[2]}'`"[0-9]{2}"

    grep -iE ${TIME} ${TENT} >> ${FILE1}
done
Run Code Online (Sandbox Code Playgroud)

我需要一个15秒余量的解决方案,任何时间都不是60.我想要输入格式filename_hh:mm:ss并采用hh:mm:ss +/- 15s的行或者filename_hh:mm:ss(1)_hh:mm:ss(2)在hh:mm:ss(1)和hh之间取行: MM:SS(2).有一段时间没有线,所以解决方案应该"识别"是否有时匹配输入间隔.

日志文件如下所示:

1002143 1002143 2014/15/05 22:09:52.937004 bla 
1002130         2014/15/05 22:09:44.786002 bla bla
1001667         2014/15/05 22:09:44.592009 bl a bla
1001667 1001667 2014/15/05 22:09:44.592009 bl a bla
Run Code Online (Sandbox Code Playgroud)

Tia*_*opo 12

我相信sed是最好的选择:

sed -rne '/<timestamp>/,/<timestamp>/ p' <file>
Run Code Online (Sandbox Code Playgroud)

例如:

tiago@dell:~$ sed -rne '/08:17:38/,/08:24:36/ p' /var/log/syslog 
May 16 08:17:38 dell AptDaemon.Worker: INFO: Processing transaction /org/debian/apt/transaction/08a244f7b8ce4fad9f6b304aca9eae7a
May 16 08:17:50 dell AptDaemon.Worker: INFO: Finished transaction /org/debian/apt/transaction/08a244f7b8ce4fad9f6b304aca9eae7a
May 16 08:18:50 dell AptDaemon.PackageKit: INFO: Initializing PackageKit transaction
May 16 08:18:50 dell AptDaemon.Worker: INFO: Simulating trans: /org/debian/apt/transaction/37c3ef54a6ba4933a561c49b3fac5f6e
May 16 08:18:50 dell AptDaemon.Worker: INFO: Processing transaction /org/debian/apt/transaction/37c3ef54a6ba4933a561c49b3fac5f6e
May 16 08:18:51 dell AptDaemon.PackageKit: INFO: Get updates()
May 16 08:18:52 dell AptDaemon.Worker: INFO: Finished transaction /org/debian/apt/transaction/37c3ef54a6ba4933a561c49b3fac5f6e
May 16 08:24:36 dell AptDaemon: INFO: Quitting due to inactivity


Ken*_*ent 8

日志文件通常按时间戳排序,假设时间戳在第一列,您可以:

awk -v from="12:52:33" -v to="12:59:33" '$1>=from && $1<=to' foo.log
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以更改from and to以获取不同的日志条目集.正则表达式不是进行数字计算/比较的好工具.