【问题标题】:Regex Date and Time Delimitter and Sort正则表达式日期和时间分隔符和排序
【发布时间】:2020-07-26 15:34:37
【问题描述】:

我的日志存储在多个基于 Sun 的 unix 服务器中。

所以 Req1 的日志可能在 server1 中,Req2 和 Req3 可能在 server2 中,然后 Req4 可能再次在 server1 中。没有正确的顺序,因为它是根据负载均衡器决定的来存储的。

我们使用 grep 从所有服务器获取数据。但问题是它们不是根据时间排序的。我想要的是从所有服务器获取日志文件,如下所示,但根据日期和时间对其进行排序。

编辑 这是问题的示例。

for (( i=1; i<=24; i++ )) do
    echo 'server1' $logfile $i 
    grep abd12453 /var/logs/$i.log
    echo 'server2' $logfile $i
    ssh server2 "grep 'abd12453' /var/logs/$i.log"
done

其中 abd12453 是提取日志所基于的用户。

上面的命令合并了两个服务器的所有文件的日志并打印出来。如下所示。

server1 logfile1.log
06/13/2020 13:26:11.142 abd12453 server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log

server2 logfile1.log
06/13/2020 13:25:23.250 abd12453 server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log 
            
server1 logfile2.log
06/13/2020 13:15:35.142 abd12453 server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2.
    
server2 logfile2.log  
06/13/2020 13:14:42.156 abd12453 server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log 

以上日志都是单行加上用户名。

我需要根据日期和时间对上面的日志数据进行排序。

需要的输出应该是

 server2 logfile2.log  
    06/13/2020 13:14:42.156 abd12453 server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log 

   server1 logfile2.log
    06/13/2020 13:15:35.142 abd12453 server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2.
    
  server2 logfile1.log
    06/13/2020 13:25:23.250 abd12453 server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log 

server1 logfile1.log
    06/13/2020 13:26:11.142 abd12453 server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log

【问题讨论】:

  • edit 您的问题包括简洁、可测试的样本输入(2 个或更多 .log 文件的几行内容)和预期输出,以便我们为您提供帮助。几乎可以肯定没有必要拥有/使用匹配日期格式的正则表达式。
  • 您需要连接所有过滤的日志,然后按适当的列对它们进行排序。由于日期时间格式,数字顺序或字母顺序都对应于时间顺序。您只需要选择升序或降序即可。
  • 各位,我很抱歉没有举个例子。你现在可以检查一下吗

标签: linux shell unix awk grep


【解决方案1】:

由于日期不是 YYYY/mm/dd 格式,因此该字段不会产生正确的排序日期顺序。因此,假设输出中的每个条目都由换行符分隔,并且都具有相同的日期值,那么我们可以 仅使用时间列([3] - 段落条目的第四个字段)通过此 perl 过滤器管道结果进行排序:

for (( i=1; i<=24; i++ )) do
    echo 'server1' $logfile $i
    grep abd12453 /var/logs/$i.log
    echo 'server2' $logfile $i
    ssh server2 "grep 'abd12453' /var/logs/$i.log"
done | perl -00e 'print reverse sort { (split(/\s+/,$b))[3] <=> (split(/\s+/,$a))[3] } <>'

会产生这样的时间排序结果:

server2 logfile2.log
06/13/2020 13:14:42.156 abd12453 server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log

server1 logfile2.log
06/13/2020 13:15:35.142 abd12453 server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2. server 1 log data2.

server2 logfile1.log
06/13/2020 13:25:23.250 abd12453 server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log data1. server 2 log

server1 logfile1.log
06/13/2020 13:26:11.142 abd12453 server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log data1. server 1 log

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多