纯awk传参和awk脚本传参
awk传参问题一直是很多人都在头疼的事情。现在总结如下:
一、直接调用awk脚本的问题。
比如下面这个脚本:要求计算15-30号的各种日志的总数。其中$3是区分不同页面编码的域,脚本如下:
#/bin/sh;
page=$1;
i=15;
while test $i -le 30
do
# awk '{m='"$j"';print $m}'
res=$( awk -F"\t" '{ if($3==p) {print $0}}' p=$page shop_page.log.2009-07-$i-* |wc -l );
echo $i" "$res;
((i=$i+1))
done
把awk脚本拿出来,awk -F"\t" '{ if($3==p) {print $0}}' p=$page shop_page.log.2009-07-$i-*
其中p在其中作为牵针引线的作用,即将参数传入了,其形式为awk -F '{脚本正文} ' 参数=值 日志名
还有一种数值型的,没有必要这样参数值放在后面
比如 currentServer=$(echo $server|awk '{m='"$j"';print $m}');
其中$j是shell脚本中的数值,这样直接把等于j的列域打印出来了。不必显示传参
二、调用awk脚本型
有时候shell脚本中需要直接调用awk脚本。传递参数时可以如下:
awk -f awk脚本.awk statDate="$statDate" statHour="$statHour" 日志名.log
其中statDate和statHour是传入的参数,其中的awk中可以直接使用
date=statDate;
hour=statHour;
一、直接调用awk脚本的问题。
比如下面这个脚本:要求计算15-30号的各种日志的总数。其中$3是区分不同页面编码的域,脚本如下:
#/bin/sh;
page=$1;
i=15;
while test $i -le 30
do
# awk '{m='"$j"';print $m}'
res=$( awk -F"\t" '{ if($3==p) {print $0}}' p=$page shop_page.log.2009-07-$i-* |wc -l );
echo $i" "$res;
((i=$i+1))
done
把awk脚本拿出来,awk -F"\t" '{ if($3==p) {print $0}}' p=$page shop_page.log.2009-07-$i-*
其中p在其中作为牵针引线的作用,即将参数传入了,其形式为awk -F '{脚本正文} ' 参数=值 日志名
还有一种数值型的,没有必要这样参数值放在后面
比如 currentServer=$(echo $server|awk '{m='"$j"';print $m}');
其中$j是shell脚本中的数值,这样直接把等于j的列域打印出来了。不必显示传参
二、调用awk脚本型
有时候shell脚本中需要直接调用awk脚本。传递参数时可以如下:
awk -f awk脚本.awk statDate="$statDate" statHour="$statHour" 日志名.log
其中statDate和statHour是传入的参数,其中的awk中可以直接使用
date=statDate;
hour=statHour;