pony

抄袭是一种美德

纯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;


posted on 2009-07-31 11:09  马森  阅读(4735)  评论(0编辑  收藏  举报

导航