按第二列中的时间戳合并多个日志文件

2024-02-19

我有同一天的多个日志文件。我想要做的是根据日志中的时间戳将它们合并为一个Perl script.

日志-1.log

2014-06-02 21:54:38,805 INFO  com.HomeManeger [Executor:Thread-19]: MyInfo started for myid=TEST-401406
2014-06-02 21:56:27,358 INFO  com.HomeManeger [Executor:Thread-13]: HomeManeger: populateMyInfo completed for my id = TEST-401406,  
2014-06-02 21:59:32,358 INFO  com.HomeManeger [Executor:Thread-17]: MyInfo completed for myid=TEST-401405

日志-2.log:

2014-06-02 21:56:27,295 INFO  com.homeManeger.MyCommand [Proxy:ProxyService:TcpWorker:2]:     MyCommand::Processing reqest[AB:MyInfo] obj(Collection [ID={005A004A5B0F9}, ]
) client(POFFBObj [ID={XXXXXX-E8F5-11D5-YYY-0002B33D9D0C}, meta={}, fields=[XXX]]
)
2014-06-02 21:58:27,310 INFO  com.HomeManeger.UpdateMyInfoTask

合并日志:

2014-06-02 21:54:38,805 INFO  com.HomeManeger [Executor:Thread-19]: MyInfo started for myid=TEST-401406
2014-06-02 21:56:27,295 INFO  com.homeManeger.MyCommand [Proxy:ProxyService:TcpWorker:2]: MyCommand::Processing reqest[AB:MyInfo] obj(Collection[ID={005A004A5B0F9}, ]
) client(POFFBObj [ID={XXXXXX-E8F5-11D5-YYY-0002B33D9D0C}, meta={}, fields=[XXX]]
)
2014-06-02 21:56:27,358 INFO  com.HomeManeger [Executor:Thread-13]: HomeManeger: populateMyInfo completed for my id = TEST-401406,  
2014-06-02 21:56:32,358 INFO  com.HomeManeger [Executor:Thread-17]: MyInfo completed for myid=TEST-401405    
2014-06-02 21:58:27,310 INFO  com.HomeManeger.UpdateMyInfoTask

我很新Perl,任何帮助,将不胜感激。


以下脚本可以处理任意数量的日志文件并将合并的日志输出到文件中。

它将把它们全部加载到内存中,因此大小是一个因素:

#!/usr/bin/perl

use warnings;
use strict;

die "Usage: perl $0 log1 log2 > merged.log\n" if !@ARGV;

my @lines;

while (<>) {
    if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/) {
        push @lines, $_;
    } else {
        $lines[-1] .= $_;
    }
}

print sort @lines;

如果内存是一个因素,您将需要进行正式的合并排序。

以下内容改编自perl merge sort https://stackoverflow.com/a/22586131/1733163从今年3月份开始:

use strict;
use warnings;
use autodie;

die "Usage: perl $0 log1 log2 > merged.log\n" if !@ARGV;

# Initialize File handles
my @fhs = map {open my $fh, '<', $_; $fh} @ARGV;

# First Line of each file
my @data = map {scalar <$_>} @fhs;

# Loop while a next line exists
while (@data) {
    # Pull out the next entry.
    my $index = (sort {$data[$a] cmp $data[$b]} (0..$#data))[0];

    print $data[$index];

    # Fill In next Data at index.
    while (defined($data[$index] = readline $fhs[$index])) {
        last if $data[$index] =~ /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/;
        print $data[$index];
    }

    # End of that File
    if (! defined($data[$index]) {
        splice @fhs, $index, 1;
        splice @data, $index, 1;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按第二列中的时间戳合并多个日志文件 的相关文章

随机推荐

  • 在 ASP.NET 视图状态中存储 Dictionary

    我正在尝试存储一个Dictionary
  • 如何解决错误 AADSTS7000218:请求正文必须包含以下参数:“client_secret”或“client_assertion”

    这就是我编写代码并尝试获取输出的方式 请求正文必须包含以下参数 client secret or client assertion static async Task
  • 如何制作自定义 BASH 函数以 cd 到具有自动完成功能的某个目录

    我的项目位于 Documents EP example project命名方案 他们都生活在 Documents 我想创建一个 bash 函数 它允许我从系统上的任何位置 cd 进入项目目录 具有自动完成功能 就像这样 cdp E
  • 通过URL查询Google Adsense数据?

    有没有办法查询里面的数据谷歌 AdSense Python API https developers google com api client library python 通过网址 例如 查找特定页面上的广告点击次数 我找不到文档中列出
  • Powershell比较两个文件并生成第三个文件

    我有 2 个文件 file1 txt 和 file2 txt 我想使用 powershell 比较这两个文件并生成第三个文件 file3 txt 其中包含 file1 txt 中的所有行减去 file2 txt 中的行 以下是文件 1 和
  • 如何在Android上安装JavaCV并使用FrameGrabber

    有人可以告诉我我哪里做错了吗 这些是我遵循的步骤 从 android 开发者网站下载 adt bundle windows 创建一个新项目和一个 libs armeabi 文件夹 将 javacv android arm jar openc
  • LINQ 在字符串数组列表中搜索特定字符串

    我有一个字符串数组列表 List
  • C++ 中的简单事件系统

    我正在为我的游戏引擎设计一个简单的事件系统 我想实现以下事件调度程序接口 Create event dispatcher Dispatcher dispatcher Create objects b and c Created object
  • 使用音频队列处理中断

    我正在开发一个音频流媒体 并声明了一个中断侦听器 以在发生中断 例如来电或短信 时保存歌曲的状态 这是相关代码 在我的 AppDelegate 中 我有这个 AudioSessionInitialize NULL NULL interrup
  • 类型错误:不可散列的类型:'dict'

    这段代码给了我一个错误 TypeError unhashable type dict 谁能向我解释一下解决方案是什么 negids movie reviews fileids neg def word feats words return
  • 如何在 Android 中读取和写入 csv 文件?

    我想将 8 个整数存储到 csv 文件中 文件名将作为 EditText 的输入 并在需要时检索它们 要获取文件名 您可以使用以下命令 EditText fileNameEdit EditText getActivity findViewB
  • 增加 GO 中的堆大小

    有没有办法指示 GO 运行时使用更大的堆 我在跑步GO 1 5 我的 GO 进程目前在 GC 上花费了 34 的时间 但它只使用了 1 3 的可用系统内存 I know ulimit可用于限制最大堆大小 我已将 ulimit 设置为 16G
  • 我可以在我的 Azure 管道中使用 2 个代理池吗?

    我有一个自托管代理 它用作一种部署代理 我们软件的所有发行版本均由该代理构建 然后复制到网络位置 问题 有没有办法可以在管道中同时利用 azure pipelines Microsoft 托管池和我自己的自托管池中的代理 EDIT 不幸的是
  • 从脚本并行 nmap 数千个子网的最佳方法是什么?

    为了清点 A 类网络部分中的端口 我使用 nmap 将其扫描为数千个 C 类网络 我使用并行方式同时运行 32 个子网扫描作业 脚本的最小化版本 while read subnet do echo nmap Pn p tcpport sub
  • Azure 媒体服务将作业回调编码为 URL

    仅使用 REST API 我就可以将文件从本地计算机上传到 Azure 媒体服务并启动编码作业 然后我需要轮询作业的状态以查看它何时完成 但是 我真正想要的是 Azure 媒体服务在完成后向我的回调 URL 发送请求 有办法做到这一点吗 查
  • 在 laravel 4 中测试过滤器

    我是 Laravel 的新手 我正在尝试测试身份验证是否适用于我的网站 并且我想在测试用例中测试身份验证过程 我创建一个内存中的 sqlite 数据库 创建一个新用户并使用 gt save eloquent 的方法将其存储在数据库中 我设置
  • ALSA 记录 - 了解内存映射

    我尝试使用 ALSA 从 USB 音频设备获取输入并将其作为一系列内容写入磁盘signed short价值观 我最终得到的是看似有效的数据块 其中散布着大块的零 我猜测我的缓冲区设置不正确并且没有正确使用内存映射 我正在尝试什么 采样率 8
  • Autofac 注册程序集类型

    在 Castle 中 我曾经执行以下操作来注册来自不同程序集的类型 Classes FromAssemblyNamed MyServer DAL Where type gt type Name EndsWith Repository Wit
  • 重叠绝对定位的内容

    我遇到了一些困难这一页 http louiswalch com beta t urs 它几乎可以正常工作 红色框应位于窗口的中心 h v 作品 黄色框应贴在窗口底部 作品 当窗口小于 400 像素高时 应出现滚动条 并且黄色框应出现在滚动区
  • 按第二列中的时间戳合并多个日志文件

    我有同一天的多个日志文件 我想要做的是根据日志中的时间戳将它们合并为一个Perl script 日志 1 log 2014 06 02 21 54 38 805 INFO com HomeManeger Executor Thread 19