LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1801|回复: 10

shell传递给awk的变量中有空格的话。。。

[复制链接]
发表于 2003-8-14 08:53:03 | 显示全部楼层 |阅读模式
如set myvar="abc def"
awk '{print "'${myvar}'"}'会报一个unterminated string的错。
还有一个问题,如何顺序得到awk数组的值呢?由于数组采用散列算法存放数组元素,所以用for语句都不行,如split("a:b:c",myarray,":"),for(i=0;i<3;i++)不行,for(i in myarray)也不行,该怎么实现呢?请指教!
发表于 2003-8-14 15:22:16 | 显示全部楼层
1,在awk中使用shell变量(例子)
  1. [/home/javalee/myshell]cat data
  2. a b:d d
  3. c c:er df df
  4. [/home/javalee/myshell]var="a b"    <=设置变量var
  5. [/home/javalee/myshell]awk [color=red]"/$var/"[/color] data
  6. a b:d d
复制代码
2,如果需要对数组进行排序,用for就可以,(我对awk的数组很不了解)
  1. [/home/javalee/myshell]set -A arg 23 45 6 22 4 7 19 7  <=建立数组arg
  2. [/home/javalee/myshell]for i in ${arg[*]};do echo $i;done|sort -n
  3. 4
  4. 6
  5. 7
  6. 7
  7. 19
  8. 22
  9. 23
  10. 45
复制代码
用awk进行排序数组,还是请教一下awk高手吧:sorry
发表于 2003-8-14 16:16:09 | 显示全部楼层
split分割的数组是无法排序的!
 楼主| 发表于 2003-8-15 07:28:27 | 显示全部楼层
javalee:
用awk "/$var/" data是可以实现模板功能,但是如果我想实现动作功能,比如打印这个shell变量的话,就不行了。
我的意图是这样的,由用户输入一个字符串,将其放入一个变量,再传给awk,此字符串中可能有空格,写成这样:
echo -n "your full name please?"
set name="$<"
echo -n "your age please?"
@ age="$<"
awk 'BEGIN{OFS=":";print "'${name}'","'${age}'"}'
结果是如果名字中不含空格就成功,否则在打印名字时报错unternimated string,我试过用printf "%s,%d"打印都不行,用你教的"/$name/"当然不行,"$name"也不行,'$name'都不行,各种组合都试过了。数组那个我是说awk的,呵呵

nmgzw:
真的没有别的办法了吗?

谢谢你们的回复!
 楼主| 发表于 2003-8-22 00:27:17 | 显示全部楼层
迫不得已,顶一下,帮帮忙
发表于 2003-8-25 12:36:08 | 显示全部楼层
awk中的变量要在awk中重新赋值:
awk 'BEGIN{$myVar="abc def"; print $myVar}'

第二个问题不知道什么意思,什么是awk数组??
在awk里面的数组又怎么用split来分割了?

[qoute]
如set myvar="abc def"
awk '{print "'${myvar}'"}'会报一个unterminated string的错。
还有一个问题,如何顺序得到awk数组的值呢?由于数组采用散列算法存放数组元素,所以用for语句都不行,如split("a:b:c", myarray,":"),for(i=0;i<3;i++)不行,for(i in myarray)也不行,该怎么实现呢?请指教!
[/quote]
 楼主| 发表于 2003-8-26 14:56:11 | 显示全部楼层
兄弟,你看了我的第一贴了吗?
1,shell传给awk的变量里带了空格,在awk里打印这个变量值就会报错,前提当然是awk不知道此值是多少,知道的话还要shell来传递吗。
2,不是如何分割数组,是如何顺序得到数组的各元素,已解决。
发表于 2003-8-26 15:38:29 | 显示全部楼层
[/home/javalee/myshell]cat data
a b:d d

c c:er df df
[/home/javalee/myshell]var="a b"    <=设置变量var
[/home/javalee/myshell]awk "/$var/" data
a b:d d
这样不是已经把shell的变量传递到awk中了么?!
发表于 2003-8-26 16:02:53 | 显示全部楼层
很可惜这里不能解决您问的问题,:sorry,,,要不你到CU去问问吧~~
http://www.chinaunix.net/forum/viewforum.php?&f=24
那里的AWK高手会给你满意答复的!
 楼主| 发表于 2003-8-27 08:47:35 | 显示全部楼层
是传到了,我说的是“打印这个变量会报错”,如果这个变量值不带空格的就不会报错。唉,看来我的表达能力有问题。

谢谢你的回复。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表