使用 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=];}' '{}' \;
我有 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=];}' '{}' \;