这个zgrep命令在1989年2月26日的24小时内输出一个包含单词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对象代替,并且只在日期更改时打开,但是您得到了这个想法。

09-04 20:06