我试图按日期解析一些nginx日志.我写了一个awk oneliner来查找一天的所有匹配日志,例如:
awk '/05\/May\/2012/ { print $0;}' /var/log/nginx/access.log
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用bash循环几天和几个月.这就是我所拥有的
#!/bin/bash
for h in 2012
do
for i in Apr May
do
for j in 01 02 03 04 05
do
echo "/${j}\/${i}\/${h}/"
search_string="'/${j}\/${i}\/${h}/ { print \$0;}'"
echo $search_string;
awk $search_string /var/log/nginx/access.log
echo "${h} ${i} ${j} done"
done
done
done
Run Code Online (Sandbox Code Playgroud)
但是,这在awk上失败了:
awk: 1: unexpected character '''
Run Code Online (Sandbox Code Playgroud)
看起来我需要逃避一些变量,但到目前为止我还没有找到解决方案.
最好使用awk的变量赋值功能将shell变量传递给awk.然后~
用来匹配模式.例如:
search_string="$j/$i/$h"
awk -v pattern="${search_string}" '$0 ~ pattern {print $0}' /var/log/nginx/access.log
Run Code Online (Sandbox Code Playgroud)
这是awk手册中指定的推荐方法.