分页: 1 / 1

求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 17:17
hhht
一个文件中记录了一些浮点数。以空格分割,数据个数不确定。想计算文件中这些数的平均值和最大值。
对shell 不熟,对awk也是文盲。。各位大侠能否指点下。谢谢。

PS :我检查了一些cpu 内存的值放入了一个文件,数据没有分行列(也可以每个数据换一行,但数据类型都是一样的,比如都是浮点数据,或者都是整数)现在想统计这些值的平均值和最大值,并把结果输出某个文件中。

求shell 脚本。


谢谢

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 17:29
lilydjwg
[python]
from stats import Stat
import sys

s = Stat()
for l in sys.stdin:
for f in l.split():
s.add(float(f))

print(s.avg, s.max)
[/python]
假设以下脚本被你保存为 st.py,如下调用:
[bash]
python3 st.py < data_file > result_file
[/bash]

stats 模块在 winterpy 仓库中。

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 17:40
cjxgm
把下面程序保存到 avemax.sh,然后 chmod +x avemax.sh,然后 ./avemax.sh < file :em09
[bash]
#if 0
gcc -o $$ -x c $0&&./$$;rm -f $$;exit
#endif
#include<stdio.h>
main(n){double x,a=0,m=-1e100;for(n=0;scanf("%lg",&x)&&!feof(stdin);n++)
{a+=x;if(x>m)m=x;}printf("%lg %lg\n",a/n,m);}
[/bash]

代码: 全选

cjxgm@clans /tmp$ cat test
1.1
2.4
3.5
3.2
cjxgm@clans /tmp$ ./avemax.sh < test
2.55 3.5
cjxgm@clans /tmp$
(第一个输出是平均值,第二个是最大值)

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 18:18
hhht
cjxgm 写了:把下面程序保存到 avemax.sh,然后 chmod +x avemax.sh,然后 ./avemax.sh < file :em09
[bash]
#if 0
gcc -o $$ -x c $0&&./$$;rm -f $$;exit
#endif
#include<stdio.h>
main(n){double x,a=0,m=-1e100;for(n=0;scanf("%lg",&x)&&!feof(stdin);n++)
{a+=x;if(x>m)m=x;}printf("%lg %lg\n",a/n,m);}
[/bash]

代码: 全选

cjxgm@clans /tmp$ cat test
1.1
2.4
3.5
3.2
cjxgm@clans /tmp$ ./avemax.sh < test
2.55 3.5
cjxgm@clans /tmp$
(第一个输出是平均值,第二个是最大值)
您好,我按您说的方法,结果不正确。

您能不帮看下。我把我的两个数据文件也贴上来。您帮看看。
cpuReport.txt 里面现在是 ×××%, 不好处理的话,可以先处理成对应的小数。

您的脚本中,不用在第一行加 #! /bin/bash 吗?

我想最后处理完的结果还是个整数或者浮点数。

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 18:25
hhht
lilydjwg 写了:[python]
from stats import Stat
import sys

s = Stat()
for l in sys.stdin:
for f in l.split():
s.add(float(f))

print(s.avg, s.max)
[/python]
假设以下脚本被你保存为 st.py,如下调用:
[bash]
python3 st.py < data_file > result_file
[/bash]

stats 模块在 winterpy 仓库中。
您好。请看我4楼贴的需要处理的代码,我试了下您的脚本。提示第二行有错。对脚本实在不熟,不知道错在哪了。谢谢您。

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 18:33
lilydjwg
hhht 写了: 您好。请看我4楼贴的需要处理的代码,我试了下您的脚本。提示第二行有错。对脚本实在不熟,不知道错在哪了。谢谢您。
你的数据文件格式太奇葩了……这样执行好了:
[bash]tr -d '\0%' < data_file | python3 st.py > result_file[/bash]

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 18:51
hhht
lilydjwg 写了:
hhht 写了: 您好。请看我4楼贴的需要处理的代码,我试了下您的脚本。提示第二行有错。对脚本实在不熟,不知道错在哪了。谢谢您。
你的数据文件格式太奇葩了……这样执行好了:
[bash]tr -d '\0%' < data_file | python3 st.py > result_file[/bash]
不知道错在哪了 :em20

文件格式如果不好,可不可以在脚本里先整理好,然后再处理。

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 19:01
lilydjwg
hhht 写了:
lilydjwg 写了:
hhht 写了: 您好。请看我4楼贴的需要处理的代码,我试了下您的脚本。提示第二行有错。对脚本实在不熟,不知道错在哪了。谢谢您。
你的数据文件格式太奇葩了……这样执行好了:
[bash]tr -d '\0%' < data_file | python3 st.py > result_file[/bash]
不知道错在哪了 :em20

文件格式如果不好,可不可以在脚本里先整理好,然后再处理。
我那里贴了两段代码,把第一段保存为 st.py,执行第二段。

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-08 23:09
cjxgm
hhht 写了:结果不正确。
数据开头有那么多没用的字节当然会不正确
已改,加了除去多余字节
[bash]
#if 0
gcc -o $$ -x c $0&&sed 's/[^0-9.\n\r\t ]//g'|./$$;rm -f $$;exit
#endif
#include<stdio.h>
main(n){double x,a=0,m=-1e100;for(n=0;scanf("%lg",&x)&&!feof(stdin);n++)
{a+=x;if(x>m)m=x;}printf("%lg %lg\n",a/n,m);}
[/bash]

Re: 求助--怎么计算一个文件中所有数据的平均值和最大值

发表于 : 2012-09-10 17:45
hhht
感谢两位朋友的帮助。万分感谢。想送个感谢 ,没找到怎么送出感谢,是有权限限制吗?想给两位送个感谢。
今天开始 好好学shell 和python。

以后请多多指教。