重击实用程序

重击实用程序

实现一个提供以下功能的 shell 脚本程序。

它需要一个日志文件作为输入。日志文件包含带有消息标记的日志语句,如侧面所示。

该实用程序列出了所有花费时间超过指定时间的操作。该时间以秒为单位从命令行指定。

输入日志文件示例:

#<process id> <date time> <log level> <file name> <line number> <actual message>

1098 2007-02-28 15:23:09 WARN db_util.c 5928 Config file not found, using default values
1098 2007-02-28 15:23:09 INFO db_util.c 5908 Connecting to database
1098 2007-02-28 15:23:17 INFO db_util.c 5908 Connected to database
1098 2007-02-28 15:23:17 ERROR log_test.c 198 Unable to setup our satellite launch system
1098 2007-02-28 15:23:18 INFO log_test.c 198 Reconnecting to launch the satellite
1098 2007-02-28 15:23:21 INFO log_test.c 198 Reconnected. Initialize to launch the satellite.

例如:如果通过将上述文件作为输入和 2 秒的性能阈值时间来执行该实用程序,则它应该产生以下输出。

示例输出:

1098 2007-02-28 15:23:09 INFO db_util.c 5908 Connecting to database
1098 2007-02-28 15:23:18 INFO log_test.c 198 Reconnecting to launch the satellite

到目前为止我已经尝试过:

awk -F' ' '! /#.*$/ {print $3}' $1 | awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}' $1

从输入日志文件读取时间列并转换为 unix 时间戳。

答案1

我实际上认为您不需要重新编码日期:

awk '{split($3, p, /:/); if (prev && (prev + 2) % 60 <= p[3]) {
      print line}; prev=p[3]; line=$0}' logfile

相关内容