使用awk命令进行递归搜索

时间:2015-01-04 20:24:07

标签: bash recursion awk

我有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" '$1 >= b && $1 <= e' log.txt > output
 grep -i "21things" output

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

感谢您的帮助.. !!

2 个答案:

答案 0 :(得分:3)

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

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

请注意,awk可以执行grep所做的操作,因此您不需要临时文件:

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

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

答案 1 :(得分:2)

您可以使用find命令以递归方式遍历目录中的所有文件,并将该文件传递到awk中。下面将显示发生匹配的所有文件。更改为必填项:

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

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

find . -type f -exec awk '/<PATTERN>/{print FILENAME ":\t" $0;}' '{}' \;