Chinaunix

标题: awk 数值求和 [打印本页]

作者: 寂寞卜孤单    时间: 2016-03-03 16:05
标题: awk 数值求和
一 计算每行数值的和
输入数据
jack 70 80 90
tom 60 70 80
jenny 50 70 60
输出数据
jack        240
jenny        180
tom        210
二 计算所有数字 的和
输入数据
1 2 3 4 5
6 7 8 9 10
输出数据
55
作者: yjh777    时间: 2016-03-03 16:08
如果是   jack 70  mike 80   petter  90   呢,应该输出什么格式?
作者: haooooaaa    时间: 2016-03-03 16:09
  1. awk '{for(i=3;i<=NF;i++)$2+=$i;NF=2}1'

  2. awk -vRS='' '{for(i=2;i<=NF;i++)$1+=$i;NF=1}1'
复制代码

作者: jason680    时间: 2016-03-03 16:20
本帖最后由 jason680 于 2016-03-03 16:29 编辑

回复 1# 寂寞卜孤单

$ cat F1
jack 70 80 90
tom 60 70 80
jenny 50 70 60

$ awk '{print $1,$2+$3+$4}' F1
jack 240
tom 210
jenny 180


$ cat F2
1 2 3 4 5
6 7 8 9 10

$ awk '{for(n=1;n<=NF;++n)s+=$n}END{print s}' F2
55

$ awk -vRS=" |\n" '{s+=$1}END{print s}' F2
55


   
作者: 寂寞卜孤单    时间: 2016-03-03 16:25
回复 3# haooooaaa


   awk -vRS='' '{for(i=2;i<=NF;i++)$1+=$i;NF=1}1'
这个,第一个数字没有被算进去啊
作者: haooooaaa    时间: 2016-03-03 16:26
回复 5# 寂寞卜孤单
  1. cyg@win /tmp$ more f
  2. 1 2 3 4 5
  3. 6 7 8 9 10

  4. cyg@win /tmp$ awk -vRS='' '{for(i=2;i<=NF;i++)$1+=$i;NF=1}1' f
  5. 55
复制代码

作者: 我是一隻羊    时间: 2016-03-03 16:38
  1. awk '($2+=$3+$4)&&NF=2'
  2. awk -vRS='[ \n]' '{b=$0;while(getline a)b+=a}$0=b'
复制代码

作者: jcdiy0601    时间: 2016-03-04 09:52
1.awk '{sum=$2+$3+$4;print $1,sum}' file

2.awk '{for(i=1;i<=NF;i++)sum+=$i}END{print sum}' file
作者: hz_oracle    时间: 2016-03-04 13:19
awk 's=0;{for(i=1;i<=NF;i++)s=$s+i;{print $1 "\t" s}}' filename
作者: bikong0411    时间: 2016-03-06 09:35
  1. awk '{sum = 0;for(i=1;++i<=NF;){sum += $i;}print $1,sum}' urfile|sort -k1

  2. awk -vRS='' '{for(i=0;i++<NF;){sum+=$i;}print sum}' urfile  
复制代码

作者: bikong0411    时间: 2016-03-06 09:42
  1. awk '{$2=$2+$3+$4;NF=2;}1' urfile|sort -k1  不通用,但是针对这个没问题
复制代码





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