这个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对象代替,并且只在日期更改时打开,但是您得到了这个想法。