python - Bash/python/perl 神奇地获取多个日志文件中的聚合日期时间

标签 python linux perl bash text-manipulation

我有一个目录 (/home/myuser/logs),其中包含过去 5 天的以下日志文​​件:

applogs_20130402.txt
applogs_20130401.txt
applogs_20130331.txt
applogs_20130330.txt

每个“applog”的每一行都具有相同的结构,只是数据不同:

<timestamp> | <fruit> | <color> | <cost>

例如,applogs_20130402.txt 可能如下所示:

23:41:25 | apple | red | 53
23:41:26 | kiwi | brown | 12
23:41:29 | banana | yellow | 1023
... (etc., every line is pipe delimited like this)

我想创建一个“主日志”,它将所有 5 个日志文件中的所有日志条目(结构化、管道分隔行)合并到一个文件中,其中所有时间戳均按时间顺序排序。此外,我还需要时间戳中反射(reflect)的日期。

例如,如果 applogs_20130402.txtapplogs_20130401.txt 是目录中仅有的 2 个应用日志,它们分别如下所示:

applogs_20130402.txt:
=====================
23:41:25 | apple | red | 53
23:41:26 | kiwi | brown | 12
23:41:29 | banana | yellow | 1023

applogs_20130401.txt:
=====================
23:40:33 | blueberry | blue | 4
23:41:28 | apple | green | 81
23:45:49 | plumb | purple | 284

然后,我想要一个 masterlog.txt 文件,如下所示:

2013-04-01 23:40:33 | blueberry | blue | 4
2013-04-01 23:41:28 | apple | green | 81
2013-04-01 23:45:49 | plumb | purple | 284
2013-04-02 23:41:25 | apple | red | 53
2013-04-02 23:41:26 | kiwi | brown | 12
2013-04-02 23:41:29 | banana | yellow | 1023

我使用的是 Ubuntu,可以访问 Bash、python 和 perl,并且不偏好使用哪种解决方案。通常我会尝试“最佳尝试”并将其发布,但我从未在 Linux 上处理过这样的聚合数据。显然,日志的大小有数千行,与我上面的示例不同。因此,手动完成所有操作不是一种选择;-) 提前致谢!

最佳答案

您可以从命令行将 Perl 与 sort 一起使用像这样:

perl -n -e 'printf "%d-%02d-%02d %s", $ARGV =~ m/_(\d{4})(\d\d)(\d\d)/, $_;' *.txt | sort -n

Calling perl with -n 包装 while (<>) { }围绕你的程序,在本例中是 -e '' 中的内容。在其中,我们 printf 当前行( $_ ),在其前面我们放置文件名中的日期,即 is stored in $ARGV 。我们使用regex获取年、月、日,这些可以通过 m// 方便地返回由于 printf 的列表上下文.

我们将文件夹中的所有 txt 文件传递​​给该程序。结果通过管道传输到命令行工具 sort,该工具使用 -n 标志对行进行数字排序。

关于python - Bash/python/perl 神奇地获取多个日志文件中的聚合日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795337/

相关文章:

Python - 打开新的 shell 并运行命令

c++ - 一般打印光栅和/或 vector 图像

c++ - 使用 'gcc' 和 'c++' 命令编译 C++ 文件有什么区别?

PHP ZipArchive::open 总是导致 ZIPARCHIVE::ER_READ 错误

linux - 在特定 shell 命令后执行一些操作 => (跟踪已安装的软件包)

perl - 有没有一种简单的方法可以将 snmp(MIB) 字符串映射到 Perl 中的 OID?

python Bokeh : Interaction lost when adding/changing children in a password secured dashboard.

python - 如何在狮身人面像中制作彩色盒子

perl - 如何从内存中删除 perl 对象

perl - 使用 perl 下载 CPAN 模块