当前位置: 技术问答>linux和unix
linux~shell~请教文件中数据计算问题
来源: 互联网 发布时间:2017-03-14
本文导语: 文件内容如下: A 1.5 2.5 4.0 B 1.2 3.21 5.55 B 2.3 3.2 3.33 A 1.25 2.3 3.77 A 4.36 1.5 2.5 C 1.1 2.3 3.41 要求对每一个字母相同的行分别求平均...
文件内容如下:
A 1.5 2.5 4.0
B 1.2 3.21 5.55
B 2.3 3.2 3.33
A 1.25 2.3 3.77
A 4.36 1.5 2.5
C 1.1 2.3 3.41
要求对每一个字母相同的行分别求平均值,即:
对包含‘A’的行:(1.5+1.25+4.36)/3 (2.5+2.3+1.5)/3 (4.0+3.77+2.5)/3
......
最终输出文件内容:
A X X X
B X X X
C X X X
谁能帮帮我啊,谢谢啦~~~
A 1.5 2.5 4.0
B 1.2 3.21 5.55
B 2.3 3.2 3.33
A 1.25 2.3 3.77
A 4.36 1.5 2.5
C 1.1 2.3 3.41
要求对每一个字母相同的行分别求平均值,即:
对包含‘A’的行:(1.5+1.25+4.36)/3 (2.5+2.3+1.5)/3 (4.0+3.77+2.5)/3
......
最终输出文件内容:
A X X X
B X X X
C X X X
谁能帮帮我啊,谢谢啦~~~
|
sort -t' ' -k 1,1 filename | awk 'BEGIN{str="";sum1=0;sum2=0;sum3=0}{sum1+=$2;sum2+=$3;sum3+=$4; if(str!=$1 && str!=""){print str,(sum1-$2)/3,(sum2-$3)/3,(sum3-$4)/3; sum1=$2;sum2=$3;sum3=$4} str=$1}END{print str,sum1/3,sum2/3,sum3/3}'
|
我最近在学习perl 还是用perl实现了一个 可是有点长 用sort和awk应该容易
下面的内容保存成sum.pl 然后
chmod +x sum.pl
然后执行的时候把文件当成参数传入
./sum.pl /path/filename
下面的内容保存成sum.pl 然后
chmod +x sum.pl
然后执行的时候把文件当成参数传入
./sum.pl /path/filename
#!/usr/bin/perl -w
use strict;
my @key = ();
my %sum = ();
my $index = 0;
my $flag = 0;
my @line = ();
while(){
chomp $_;
$flag = 0;
@line = split ' ',$_;
foreach(@key){
if($_ eq $line[0]){
for($index=0;$index
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!