【转载】shell中awk参数的传递问题

关于awk 接受shell 变量参数传递的问题 ( 2006/4/28 )

本文出处:

http://bbs.chinaunix.net/viewthread.php?tid=747440&page=1&extra=page%3D1#pid5088268

 

本文出处:

http://bbs.chinaunix.net/viewthread.php?tid=747440&page=1&extra=page%3D1#pid5088268

查看分区信息:
# df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda11 497829 110331 361796 24% /
/dev/hda1 54416 3507 48100 7% /boot
/dev/hda8 4079648 2933032 939380 76% /home
/dev/hda13 303344 15 287668 1% /tmp
/dev/hda6 6048320 2071524 3669556 37% /usr
/dev/hda7 6048320 4485312 1255768 79% /usr/oracle
/dev/hda5 9076364 4931708 3683596 58% /usr/oracle/dbs
/dev/hda9 1209572 578852 569276 51% /var
/dev/hda12 497829 15503 456624 4% /var/log


给变量赋值50
dfspace=50
# echo $dfspace
50

取出空间利用率大于50%的,打印出分区名:(这个结果正确)
[root@netlog]# df -k| awk '{if($5+0 >= 50) print $6}'
/home
/usr/oracle
/usr/oracle/dbs
/var

取出空间利用率大于50%的,打印出分区名:(这里使用调用变量参数,结果不正确
,将所有分区都列出来了!!)这个参数应该如何写呢?谢谢了啊!!

# df -k| awk '{if($5+0 >= $dfspace) print $6}'
/
/boot
/home
/tmp
/usr
/usr/oracle
/usr/oracle/dbs
/var
/var/log


===============

终于解决了,应该使用语句来实现:

df -k| awk '{if($5+0 > dfspace2) print $6}' dfspace2=$dfspace

在下面的站点找到解决问题的原因 :
http://bbs.linuxsky.net/viewthread.php?tid=1869

2) 自定义变量
1) 定义变量: varname=value (自定义变量不需先声明后使用,赋值语句同时完成变量定义和初始化)
2) 在表达式中出现不带双引号的字符串都被视为变量,如果之前未被赋值,默认值为0或空字符串。
3) 向命令行awk程序传递变量的值:
① Usage: awk 'awk_script' awkvar1=value1 awkvar2=value2 .... input_file
eg: awk '{if ($5 < ARG) print $0 }' ARG=100 input_file
② awkvar可以是awk内置变量或自定义变量。
③ awkvar的值将在awk开始对输入文件的第一条记录应用awk_script前传入。如果在awk_script中已经对某个变量赋值,那么在命令行上传人到该变量的值就会无效(实际上是awk_script中的赋值语句覆盖了从命令行上传入的值)。
④ 在awk脚本程序中不能直接使用shell的变量。通过使用下面的语法可达到这样的效果。
awk 'awk_script' awkvar1=shellvar1 awkvar2=shellvar2 .... input_file
eg: awk '{if (v1 == "root") {print "User name is root!"}}' v1=$USER input_file
⑤ 可以向awk脚本传递变量的值,与上面的类似。
awk_script_file awkvar1=value1 awkvar2=value2 ... input_file

④ 在awk脚本程序中不能直接使用shell的变量。通过使用下面的语法可达到这样的效果。
awk 'awk_script' awkvar1=shellvar1 awkvar2=shellvar2 .... input_file
eg: awk '{if (v1 == "root") {print "User name is root!"}}' v1=$USER input_file
⑤ 可以向awk脚本传递变量的值,与上面的类似。
awk_script_file awkvar1=value1 awkvar2=value2 ... input_file

来自http://hi.baidu.com/zhangxiaohu108/blog/item/015c11ed28358831279791d5.html

posted on 2011-10-05 13:26  傻子才悲伤  阅读(2689)  评论(0)    收藏  举报

导航