提取多个.gz文件,并打印提取文件的名称

弗洛里斯

我认为这很容易,但是我正在阻止…

我有一个包含一系列日志文件的目录(来自Minecraft服务器...):

2014-09-28-1.log.gz
2014-09-29-1.log.gz
2014-09-30-1.log.gz
2014-10-01-1.log.gz
2014-10-02-1.log.gz
latest.log

我想提取用户登录时的日期和时间。但是,当我这样做时

gzcat *.gz | grep 'logged in'

我得到这样的输出:

[19:26:03] [Server thread/INFO]: Foo[/ip address] logged in with entity id 193955 at (location)
[18:26:08] [Server thread/INFO]: Baz[/ip address] logged in with entity id 194873 at (location)
[01:16:38] [Server thread/INFO]: User[/ip address] logged in with entity id 198895 at (location)

等等。

不幸的是,当我获得时间戳记时,我没有得到日期。理想情况下,输出为

2014-10-03 19:26:03 Foo logged in
2014-10-04 18:26:08 Baz logged in
2014-10-05 01:16:38 User logged in

我认识到可能需要使用awk脚本来实现该“理想”输出。但是,是否有一种简便的(非awk)解决方案来使日期散布在列表中?像这样的东西:

2014-10-03-1.log.gz
[19:26:03] [Server thread/INFO]: Foo[/ip address] logged in with entity id 193955 at (location)
2014-10-04-1.log.gz
[18:26:08] [Server thread/INFO]: Baz[/ip address] logged in with entity id 194873 at (location)
2014-10-05-1.log.gz
[01:16:38] [Server thread/INFO]: User[/ip address] logged in with entity id 198895 at (location)

(即每个文件内grepped位之前的文件名)已经非常有用。

请注意,每个日志文件中通常有许多其他条目-可以有多个登录名和其他消息(我今天对此不感兴趣)。

用最短的形式,我的问题变成:

gzcat在传递该zip文件的内容以grep进行进一步处理之前,我可以使用它打印每个zip文件的名称的方式吗?

可以编写一个脚本来完成整个工作;但是我正在寻找更聪明的东西(我想知道是否tee可以将文件名打印到stderr以及作为参数传递给grep,)。

斯里尼迪

这是gzcatgzip包裹提供的吗?在我的openSUSE GNU / Linux机器上,二进制文件称为zcat如果gzip确实安装在您的计算机上,则还应该有另一个名为的二进制文件zgrep,它只是一个将文件解压缩stdout并调用的shell脚本grep

zgrep接受(几乎)与相同的参数集grep因此,您可以这样做:

$ zgrep -H'登录'* .gz`

这将以以下格式返回输出:

2014-10-03-1.log.gz:[19:26:03] [服务器线程/ INFO]:Foo [/ ip地址]在(位置)以实体ID 193955登录

您可以使用其替换.gz:为仅一个空格trsed获取接近理想输出的值

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章