我有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命令递归搜索?
感谢您的帮助.. !!
答案 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;}' '{}' \;