这个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的文件。我有兴趣从这个问题的正上方的代码行中获取第一颗星的值。
答案 0 :(得分:1)
Grep写出了该行所在的文件,但是你的剪切命令正在抛弃它。你可以这样做:
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对象而只在日期改变时打开,但你明白了。