LinuxSir.cn,穿越时空的Linuxsir!

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

有关awk函数的问题:

[复制链接]
发表于 2004-7-17 13:47:16 | 显示全部楼层 |阅读模式
在Awk实例3中的例子:

printf()
  1. x=1
  2. b="foo"
  3. printf("%s got a %d on the last test\n","Jim",83)
  4. myout=("%s-%d",b,x)
  5. print myout
复制代码


无论是写在myscript.awk中,或是写在一个命令行,都报错:
awk: myscript.awk:6:    myout=("%s-%d",b,x)
awk: myscript.awk:6:                       ^ unexpected newline or end of string
 楼主| 发表于 2004-7-17 13:53:21 | 显示全部楼层
还有,
像下面一行:

  1. awk BEGIN'{mystring="How are you doing today?";sub(/o/,"O",mystring); \
  2. print mystring;mystring="How are you doing today?";gsub(/o/,"O",mystring);print mystring}'
复制代码

如果前面不添加BEGIN,
则会陷入循环。
而BEGIN,END写在一个命令行里的时候,是怎样的格式呢?
BEGIN'{}',还是'BEGIN{}'呢?
发表于 2004-7-17 14:02:51 | 显示全部楼层

回复: 有关awk函数的问题:

最初由 aaccdd 发表
在Awk实例3中的例子:

printf()
  1. x=1
  2. b="foo"
  3. printf("%s got a %d on the last test\n","Jim",83)
  4. myout=("%s-%d",b,x)
  5. print myout
复制代码


无论是写在myscript.awk中,或是写在一个命令行,都报错:
awk: myscript.awk:6:    myout=("%s-%d",b,x)
awk: myscript.awk:6:                       ^ unexpected newline or end of string

printf("%s-%d",b,x)
发表于 2004-7-17 14:10:57 | 显示全部楼层
最初由 aaccdd 发表
还有,
像下面一行:

  1. awk BEGIN'{mystring="How are you doing today?";sub(/o/,"O",mystring); \
  2. print mystring;mystring="How are you doing today?";gsub(/o/,"O",mystring);print mystring}'
复制代码

如果前面不添加BEGIN,
则会陷入循环。
而BEGIN,END写在一个命令行里的时候,是怎样的格式呢?
BEGIN'{}',还是'BEGIN{}'呢?


在awk的command部分加括单引号,目的是使命令行处理跳过前十个步骤以完好地把这部分传递给awk命令。
BEGIN不是bash的敏感字,所以可以在单引号以外,并不影响awk的执行(但这不是一个好习惯);BEGIN{}是awk读取文件之前的操作,如果你不加BEGIN,那么单引号内的{}就是文件处理过程,既然你没有传递任何文件给awk,那自然它就会陷入死循环而空等。

ps:请细读有关精华帖!解疑之最直接途径乃善于搜索出已有的解决方案或途径,问则次之。
 楼主| 发表于 2004-7-17 14:15:37 | 显示全部楼层
谢谢教主!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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