gpt4 book ai didi

linux - 在 Linux 中递归执行 zgrep

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:13 31 4
gpt4 key购买 nike

当给定 1989 年 2 月 26 日所有 24 小时的巨大输入日志文件时,此 zgrep 命令输出包含单词 yellow 的行的特定字段。

zgrep 'yellow' /color_logs/1989/02/26/*/1989-02-26-00_* | cut -f3 -d'+' 

1) 我更喜欢使用 perl 脚本。使用 bash 脚本有优势吗?

此外,在编写此脚本时,我希望它在处理完每一天的数据后创建一个文件(这样它将查看一天中的所有时间)

zgrep 'yellow' /color_logs/1989/02/*/*/1989-02-26-00_* | cut -f3 -d'+' 

2) 在处理一天的数据后,我如何确定第一个星号(在 Perl 中)的值,以便我可以输出名称中包含 YYMMDD 的文件。我有兴趣从这个问题正上方的代码行中获取第一颗星的值。

最佳答案

Grep 写出该行所在的文件,但您的 cut 命令将其丢弃。你可以这样做:

open(PROCESS, "zgrep 'yellow' /color_logs/1989/02/*/*/1989-02-26_* |");
while(<PROCESS>) {
if (m!/color_logs/(\d\d\d\d)/(\d\d)/(\d\d)/[^:]+:(.+)$!) {
my ($year, $month, $day, $data) = ($1, $2, $3, $4);
# Do the cut -f3 -d'+' on the line from the log
my $data = (split('+', $data))[2];
open(OUTFILE, ">>${year}${month}${day}.log");
print OUTFILE $data, "\n";
close(OUTFILE);
}
}

这是低效的,因为您要为每一行打开和关闭文件,您可以改用 IO::File 对象,并且仅在日期更改时打开,但您明白了。

关于linux - 在 Linux 中递归执行 zgrep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365048/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com