Chinaunix

标题: shell可以将多个文件计算如下吗?? [打印本页]

作者: 夏洛特猫    时间: 2015-12-02 09:10
标题: shell可以将多个文件计算如下吗??
本人小白,刚接触shell不久,遇到了个题是说将三个文件中的数字分别计算之后对其求平均值,并保存原始格式。虽然知道要用awk....但是具体怎么用就不太清楚,希望大家能帮帮忙。
题目信息如下
有三个文件:
a.txt 的内容为      
1  2
2  3
3  4
b.txt的内容为
3 4
10 2
7 2
c.txt的内容为
1 1
2 3
3 4

计算结果应该是:
1+3+1 2+4+1
2+10+2 3+2+3
3+7+3 3+2+4
计算结果是:
5 7
14 8
13 9的结果

不知道怎么才能实现。。。。。
作者: zxy877298415    时间: 2015-12-02 09:45
  1. awk '{a[FNR]+=$1;b[FNR]+=$2;}END{for(i=1;i<=FNR;i++) print a[i],b[i]}' a.txt b.txt c.txt
复制代码
回复 1# 夏洛特猫


   
作者: sync_1521    时间: 2015-12-02 09:50
  1. awk '{for(i=1;i<=NF;i++){a[FNR,i]+=$i};l=l>FNR?l:FNR;t=t>NF?t:NF}END{for(i=1;i<=l;i++){for(j=1;j<=t;j++){printf a[i,j]" "};printf "\n"}}' a.txt b.txt c.txt
复制代码

作者: haooooaaa    时间: 2015-12-02 11:25
本帖最后由 haooooaaa 于 2015-12-02 11:26 编辑
  1. paste  a b c | awk -vf=3 '{for(i=0;++i<=NF;)for(j=0;++j<=NF/f;)$j+=$(i*2+j);NF=NF/f}1'
复制代码

作者: 夏洛特猫    时间: 2015-12-02 15:46
非常感谢,因为只知道awk的简单用法而不知道FNR的用法,多谢了还有个问题是这种支持avg的求平均值吗? 回复 2# zxy877298415


   
作者: 夏洛特猫    时间: 2015-12-02 15:47
特别感谢。。。shell的内置awk命令确实应该好好学,多谢您的帮助 thankyou~ 回复 4# haooooaaa


   
作者: 夏洛特猫    时间: 2015-12-02 15:49
学习了,您的方法同样可以实现,thanks~回复 3# sync_1521


   
作者: 夏洛特猫    时间: 2015-12-02 17:02
就是对最后的结果每行每列的数字都除以3 求平均值 回复 2# zxy877298415


   
作者: 夏洛特猫    时间: 2015-12-02 17:06
通过简单的awk '{print $1/5,$3/5}' a.txt 就可以实现。。。回复 8# 夏洛特猫


   
作者: MMMIX    时间: 2015-12-02 20:29
夏洛特猫 发表于 2015-12-02 15:47
特别感谢。。。shell的内置awk命令确实应该好好学,多谢您的帮助 thankyou~ 回复 4# haooooaaa


awk 不是 shell 的内置命令。
作者: 夏洛特猫    时间: 2015-12-03 10:29
哦哦 多谢纠正回复 10# MMMIX


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2