LinuxSir.cn,穿越时空的Linuxsir!

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

请问awk中的浮点数据结果如何导出到外部变量?[脚本解决]

[复制链接]
发表于 2004-6-23 09:30:43 | 显示全部楼层 |阅读模式
awk运行后得到两个浮点数据,想把他们用于后面另外一个awk当中,可是如何导出这两个数呢?
我只能把它们写到文件当中,可是取出的时候就成为字符串的形式了
能不能直接把他们赋给外部变量,或者别的方法?
叩谢!!
发表于 2004-6-23 11:30:35 | 显示全部楼层
根据你所说,这两个浮点数只是中间变量,所以利用管道是最适宜的方式,无须另存变量。
在前一个awk的END{}输出这两个浮点数至管道给后一个awk使用即可。
发表于 2004-6-23 12:55:30 | 显示全部楼层
如果确需保存至“外部变量”,可以用这种形式:
xx=$(echo hello)
 楼主| 发表于 2004-6-23 18:56:42 | 显示全部楼层
可是我不是单单对这两个数进行下一个awk
还要对文件的数据分析的,只是分析的时候用到这两个数,
问下教主,是不是可以把多个源用多个管道进到一处呢?
发表于 2004-6-23 19:11:50 | 显示全部楼层
可是我不是单单对这两个数进行下一个awk
还要对文件的数据分析的,只是分析的时候用到这两个数

可以在awk中打开文件,这是另一码事;那两个数乃中间数据,没必要另存之。

问下教主,是不是可以把多个源用多个管道进到一处呢?

这种思路是没多大意义的,而且bash本身不提供这类功能。
awk可以拥有多种数据源,可以打开多个文件,也可以同时接受标准输入,更可以同时获取环境变量,足以满足你的需求。
 楼主| 发表于 2004-6-23 19:16:07 | 显示全部楼层
To: dearvoid
不是很明白你的意思
xx=$(awk...) ???
可是有两个数值需要保存
而在awk内部 xx=$(print ...) 岂不是成为了内部变量,应该也是不可以的吧

ps:其实我想完成的功能是这样的:
    对一个文件中的某一列数据求均值和标准差
    均值用一个awk求出来以后,导不出来:confused:
发表于 2004-6-23 19:31:53 | 显示全部楼层
最初由 spqbupt 发表
To: dearvoid
不是很明白你的意思
xx=$(awk...) ???
可是有两个数值需要保存
而在awk内部 xx=$(print ...) 岂不是成为了内部变量,应该也是不可以的吧

ps:其实我想完成的功能是这样的:
    对一个文件中的某一列数据求均值和标准差
    均值用一个awk求出来以后,导不出来:confused:

再说一次。不必要定义变量来存储中间数据。

  1. END{print var1,var2}
复制代码
 楼主| 发表于 2004-6-23 19:33:35 | 显示全部楼层
最初由 home_king 发表
根据你所说,这两个浮点数只是中间变量,所以利用管道是最适宜的方式,无须另存变量。
在前一个awk的END{}输出这两个浮点数至管道给后一个awk使用即可。


有点明白了,
烦请教主详细说下这两个数字第二个awk如何接收存储
发表于 2004-6-23 19:37:51 | 显示全部楼层

  1. awk 'BEGIN{var1=23;var2=45;print var1,var2}' | awk '{sum=$1+$2;print sum}'
复制代码

略举一例。
对于你的情况,可以在END{}输出,上面已述。
 楼主| 发表于 2004-6-23 22:07:50 | 显示全部楼层
最初由 home_king 发表
  1. awk 'BEGIN{var1=23;var2=45;print var1,var2}' | awk '{sum=$1+$2;print sum}'
复制代码
略举一例。
对于你的情况,可以在END{}输出,上面已述。

斑竹的意思我明白
如果我直接输出均值和标准差是可以这样的

不过我可能没有说明白
我的问题是:算标准差的时候要用每一个的样本值减去均值 也就是说用文件每一行的值减去均值。
我的第一个awk在最后算出了均值,然后希望用另一个awk 再从头处理这个文件,计算标准差,可是这个均值咋进到第二个awk里面我就没有办法了

我想过在一个awk里面用循环遍历文件两次,不过新手,看了很久觉得好像不行,才想出这个曲线救国的方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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