免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6679 | 回复: 11
打印 上一主题 下一主题

Awk 中调用system的变量传递问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-25 12:35 |只看该作者 |倒序浏览
#pwd
/u
#cat ../ans.awk

BEGIN{
}
{
  variable=dir_name
  system("mkdir /u/variable"
}
END{
}
#cat ../open.txt |awk -f ../ans.awk 2>/dev/null
#pwd
/u
#lf
u/  variable/

就是如何在awk脚本中执行system命令调用时将awk脚本中的变量传递给syetem中的串??????????

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
2 [报告]
发表于 2003-12-25 12:59 |只看该作者

Awk 中调用system的变量传递问题

  1. system("mkdir /u/" variable)
复制代码

是不是这个意思?

论坛徽章:
0
3 [报告]
发表于 2003-12-25 13:18 |只看该作者

Awk 中调用system的变量传递问题

[quote]原帖由 "r2007"]是不是这个意思?[/quote 发表:


不是的,我的意思是
如果在awk里面执行system("/u/kkk"
则会在/u目录下建立kkk目录
但是现在我现在system("/u/variable"
这里的variable是一个变量的名称,
上面有variable=dir_name,
可以系统还是建立了/u/variable的目录,并没有建立/u/dir_name的目录
我是要知道如何将awk中定义的变量传递给system中调用执行

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
4 [报告]
发表于 2003-12-25 13:30 |只看该作者

Awk 中调用system的变量传递问题

你试了吗?
这是我的测试结果
  1. r2007@www r2007 $ ls -d var3
  2. ls: var3: No such file or directory
  3. r2007@www r2007 $ awk 'BEGIN{d="var3";system("mkdir ./" d)}'                    
  4. r2007@www r2007 $ ls -d var3
  5. var3
  6. r2007@www r2007 $
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-12-25 13:58 |只看该作者

Awk 中调用system的变量传递问题

[quote]原帖由 "r2007"][/quote 发表:


呵呵,行了,开始我没有对变量加引号,即然后d=var3
这样就不行,必须是d="var3"
不过还好d=substr($0,4,和在把d1=d
system("mkdir /u/"d)和system("mkdir /u/"d1)都可以
不过还有个请求
就是如何在awk中
用system表达system("cat /u/var1/var2|sed -n '4p' >>var3"
这样的意思??(其中var1,var2,var3都在awk脚本中通过substr获得)
真不知道这样引号该怎么加了???

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
6 [报告]
发表于 2003-12-25 14:13 |只看该作者

Awk 中调用system的变量传递问题

空格在awk中是字符串连接操作符。
所以将固定字串放在""中,变量放在""外面,之间用空格连起来,如下(未测试)

  1. system("cat /u/" var1 "/" var2 "|sed -n '4p' >>" var3)
复制代码

论坛徽章:
0
7 [报告]
发表于 2003-12-25 15:07 |只看该作者

Awk 中调用system的变量传递问题

楼主要会举一反三才行呀,
其实所提问题核心在:在awk中如何合并字符串或存放字符串的变量。
s_var1 = "a"
s_var2 = "b"
s_var3 = "c"
s_com = s_var1 s_var2 s_var3 "DDD" "EEE

s_com最后就是字符串"abcDDDEEE", ok ?

论坛徽章:
0
8 [报告]
发表于 2003-12-25 15:09 |只看该作者

Awk 中调用system的变量传递问题

最后的EEE漏了一个", sorry,大意之失!

论坛徽章:
0
9 [报告]
发表于 2003-12-25 17:38 |只看该作者

Awk 中调用system的变量传递问题

在c中可以这样
char buff[50];
sprintf(buff,"/u/%s",variable)
system(buff);
但是awk中的sprintf不行。
还有就是同样的代码在awk中可以运行了,
但是用gawk不行
就是说刚刚上面成功运行的system调用,如果换成gawk会报错,
不知道什么原因?

论坛徽章:
0
10 [报告]
发表于 2003-12-25 17:51 |只看该作者

Awk 中调用system的变量传递问题


  1. #!/bin/sh
  2. for i in `cat test2`
  3. do
  4. awk '{system("curl -x "$1":"$2" ""'$i'")}' test
  5. done
复制代码


这个例子就很能说明问题了...简单的说就是除了awk变量以外其他一律用""包围
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP