LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 04-04-21, 22:02 第 1 帖
scopio
 
scopio 的头像
 
 
注册会员  
  注册日期: Aug 2002
  帖子: 422
  精华: 3
 

标题: awk引用变量的问题


#!/bin/ksh
set -A arg 1 2 3 4
echo ${arg[0]}
awk "{print ${arg[0]} + ${arg[1]}*$1}" test.dat

其中test.dat的内容为
1 3
2 4
3 5
2 4


我发现awk后面跟一对单引号''时,$1可以起作用,但是${arg[0]}不起作用,如果用双引号""时,就刚好反过来。搞了半天不知道怎么做了,请高手们帮帮忙







__________________
华中师范大学化学院
计算化学
- Awk, Fortran
- NWChem, Gaussian,Amber
- Autodock, InsightII, Sybyl...
  scopio 当前离线   回复时引用此帖
旧 04-04-21, 22:45 第 2 帖
home_king
 
home_king 的头像
 
 
临时退役版主  
  注册日期: Mar 2003
  帖子: 2,759
  精华: 15
 

标题: 回复: awk引用变量的问题


引用:
最初由 scopio 发表
#!/bin/ksh
set -A arg 1 2 3 4
echo ${arg[0]}
awk "{print ${arg[0]} + ${arg[1]}*$1}" test.dat

其中test.dat的内容为
1 3
2 4
3 5
2 4


我发现awk后面跟一对单引号''时,$1可以起作用,但是${arg[0]}不起作用,如果用双引号""时,就刚好反过来。搞了半天不知道怎么做了,请高手们帮帮忙
请先参阅bash的命令行处理,ksh有类似的处理过程。
http://www.linuxsir.org/bbs/showthre...threadid=99465
为了避免$1被bash解析为位置参数,加上了单引号来跳过bash的前十步处理。

awk引用外部变量的六种方法:
1. awk -v awkvar=$extvar ... #使变量的作用域扩展至BEGIN{}
2. awk '<awk expression>' "awkvar=$extvar" filename #BEGIN段不可用
3. 在awk表达式中使用'$extvar'
4. 模式引用(在正则表达式中引用外部变量) '"$extvar"'
5. 遍历外部数组(用于BEGIN段处理) awk -f 'BEGIN{for(i=1;i<ARGC;i++)print ARGV[i]}' ${extarr[@]}
6. 引用环境变量 ENVIRON["environment variable"]







__________________
IBOX, a LiveCD distribution based on Gentoo, is fit for newbie.

IBOX brings to you:
- knoppix-style harddisk installation tool, by which you can install Gentoo in 20 minutes.
- hardware auto-configuration. You can run into X desktop directly.
- all-round software set, including OpenOffice, azureus.
- LiveCD-create-tools. Step-by-step, custom a LiveCD yourself with ease.

Any questions and feedbacks is welcome to home_king at 163 dot com

此帖于 04-04-29 01:50 被 home_king 编辑.
  home_king 当前离线   回复时引用此帖
旧 04-04-21, 23:40 第 3 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

代码:
#!/bin/ksh set -A arg 1 2 3 4 echo ${arg[0]} awk '{print '${arg[0]}' + '${arg[1]}'*$1}' test.dat
home_king兄的解释,我没什么补充的
ps:不要被书本的东西搞混头脑,自己多动手实践实际,养成习惯了,自然就可淋漓尽致的发挥了~~~
  KornLee 当前离线   回复时引用此帖
旧 04-04-22, 10:23 第 4 帖
scopio
 
scopio 的头像
 
 
注册会员  
  注册日期: Aug 2002
  帖子: 422
  精华: 3
 

谢谢两位,从你们身上可以学到很多东西

不过我自己没有书,我是看你们的脚本在学习,呵呵

set -A arg 1 2 3 4

是我从Javalee的一个脚本里看到的,我发现sh里没有用,不知道对应的sh里面是什么样实现的,谢谢
  scopio 当前离线   回复时引用此帖
旧 04-04-22, 11:11 第 5 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

引用:
最初由 scopio 发表
谢谢两位,从你们身上可以学到很多东西

不过我自己没有书,我是看你们的脚本在学习,呵呵

set -A arg 1 2 3 4

是我从Javalee的一个脚本里看到的,我发现sh里没有用,不知道对应的sh里面是什么样实现的,谢谢
这是ksh创建数组的方法,与之类似,bash是这样:
art=(1 2 3 4)
而对数组元素的引用都是一样的
  KornLee 当前离线   回复时引用此帖
旧 04-04-22, 17:28 第 6 帖
scopio
 
scopio 的头像
 
 
注册会员  
  注册日期: Aug 2002
  帖子: 422
  精华: 3
 

谢谢:)
  scopio 当前离线   回复时引用此帖
旧 04-04-26, 01:46 第 7 帖
home_king
 
home_king 的头像
 
 
临时退役版主  
  注册日期: Mar 2003
  帖子: 2,759
  精华: 15
 

给出了模式引用外部变量以及索引外部数组的方法,请重温楼上帖子。

此帖于 04-04-27 12:15 被 home_king 编辑.
  home_king 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:35


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org