LinuxSir.cn,穿越时空的Linuxsir!

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

awk的内部变量操作问题

[复制链接]
发表于 2006-5-5 22:31:03 | 显示全部楼层 |阅读模式
在一个bash里面这样写时

代码:
       

awk '$8~/'$arg'/ && $5!=0 {tt=$8; $8=${8%list};print $6"-"$7,$8}' ~/dpkg.list
       


tt=$8; $8=${8%list};这里
{action}部分:这里tt不能输出到包含此行的bash环境里面。$8也不能这样出尾操作。那位出个高招。
发表于 2006-5-7 03:24:59 | 显示全部楼层
awk不使用bash的功能,awk有自己string做替换的函数,好几个,你可以试试。还有就是我认为awk的内部变量是在subshell中产生执行的,所以不能传递到父shell中。不过也没有必要直接在awk中传递吧,如果你是想保留$8的值,直接到源文件中索取就是了,因为awk并没有改那个文件啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-7 14:35:37 | 显示全部楼层
谢谢回复,哎贴了4个论坛,就这一个回复了。

我就是想awk既然可以解释父shell的变量,为什么不能修改父shell的变量呢。要是awk里面可以这样,甚至可以执行shell命令多好。

在irc.freenode问过,有system()这样的说法,也不能输出。man里面有ENVIRON的写法,也只是接受而已。

${8%list}的,已经用gsub算了。

tt=$8这样的输出,其实是因为awk内部有很好用的函数计算,有时候还想内部一次输出2,3个变量,其实是想偷懒而已。呵呵。
回复 支持 反对

使用道具 举报

发表于 2006-5-8 05:15:00 | 显示全部楼层
子shell继承父shell的变量,但反之不然。我自己还有一种理解就是awk本身是一种健全的编程语言和程序解释器,他有自己的变量定义空间,和shell的变量我认为是两码事。你shell中的tt和后来在awk中的tt变量除了名字一样,其实根本没有什么关系。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-9 11:04:32 | 显示全部楼层
“子shell继承父shell的变量,但反之不然。”
这个,我现在认识到了。谢谢啊。
我也看完了几个手册,确实如此。在irc也问过。也曾试过system("export tt")这样的,谁知道system又是awk的子shell了。也不行。

等什么时候,awk版本升级,说不定可以export到系统环境,倒是一个好事啊。希望。谢谢了。
回复 支持 反对

使用道具 举报

发表于 2006-5-11 09:58:01 | 显示全部楼层
恩,楼上的理解都非常的透彻!
我的个人看法也是AWK和SHELL就是2个不同的语言解释器;awk可以在shell下执行,但awk的函数,内部变量都是自己的。和shell没有任何的关系!
回复 支持 反对

使用道具 举报

发表于 2006-5-16 23:09:35 | 显示全部楼层
我一般用a=`awk ....`得到一个变量或用read a b c < <(awk ...)来得到多个变量。bash环境。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-17 10:07:04 | 显示全部楼层
Post by lastart
我一般用a=`awk ....`得到一个变量或用read a b c < <(awk ...)来得到多个变量。bash环境。

read的这个方法也很好啊。赞扬,可以用于很多情况了。

谢谢大家了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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