使用 awk 命令进行递归搜索

Recursive search using awk command

我有 100 个日志文件,我希望 awk 在给定时间戳之间递归地搜索给定模式。 日志文件看起来像这样

2010-03-24 07:00:01 ZZZZC941948879 RUFFLES 222.222.222.222 GET / - 80 - 220.181.7.113 HTTP/1.1       
2010-03-24 07:00:23 ZZZZC941948879 RUFFLES 222.222.222.222 GET 

代码是

 awk -v "b=$date1" -v "e=$date2" ' >= b &&  <= e' log.txt > output
 grep -i "21things" output

我可以搜索模式,但只能搜索单个文件。是否可以使用awk命令递归搜索?

感谢您的帮助..!!

如果您的日志都在同一目录中,请使用 shell 通配符:

awk -v "b=$date1" -v "e=$date2" ' >= b &&  <= e' *.log

请注意 awk 可以完成 grep 的功能,因此您不需要临时文件:

awk -v "b=$date1" -v "e=$date2" -v patt="21things" '
     >= b &&  <= e && tolower([=11=]) ~ patt
' *.log

如果您有 GNU awk,请使用 -v IGNORECASE=1 并删除 tolower 功能。

您可以使用 find 命令递归地遍历目录中的所有文件并将文件传递给 awk。以下将显示发生匹配的所有文件。更改为所需的:

find . -type f -exec awk '/<PATTERN>/{print FILENAME; nextfile}' '{}' \;

以下将打印出与文件名匹配的所有行:

find . -type f -exec awk '/<PATTERN>/{print FILENAME ":\t" [=11=];}' '{}' \;