Chinaunix首页 | 论坛 | 博客
  • 博客访问: 360350
  • 博文数量: 66
  • 博客积分: 3201
  • 博客等级: 中校
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-04 11:17
文章分类

全部博文(66)

文章存档

2016年(1)

2014年(1)

2012年(1)

2011年(2)

2010年(18)

2009年(42)

2008年(1)

分类: LINUX

2010-03-03 17:33:04

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;
阅读(456) | 评论(0) | 转发(0) |
0

上一篇:opensolaris记录

下一篇:记录一下

给主人留下些什么吧!~~