zoukankan      html  css  js  c++  java
  • awk对一行或者一列求和

    cat 234.txt


    A01,30,16,11,9,3,2,30,30,16,9,3,2
    A02,14,6,12,1,0,7,14,,14,6,1,0,5
    A03,4,0,11,3,0,,1,4,0,,4,0,3,8
    A09,6,3,16,0,0,,3,6,0,6,3,0,6 

    对 各列求和

    cat 234.txt  | awk -F, '{for(i=2;i<=NF;i++) a[i]+=$i ;print} END{ printf "TOTAL "; for(j=2;j<=NF;j++) printf  a[j]","; print""}'    

    cat 234.txt |awk -F, '{for(i=2;i<=NF;i++) a[i]+=$i ;print} END{ printf "TOTAL "; for(j=2;j<=NF;j++) printf a[j]","; print""}'


    AA01,30,16,11,9,3,2,30,30,16,9,3,2
    AA02,14,6,12,1,0,7,14,,14,6,1,0,5
    AA03,4,0,11,3,0,,1,4,0,,4,0,3,8
    AA09,6,3,16,0,0,,3,6,0,6,3,0,6


    TOTAL 54,25,50,13,3,9,48,40,30,21,11,2,14,

    把每列的总和用数组a[i]来表示;用for(i=2;i<=NF;i++)来打印每列的总和

    对各行求和

    cat 234.txt |awk -F, '{ sum=0; sum=$2+$3+$4+$5+$6+$7+$8+$9+$10+$11+$12 ;print $0 " " sum;}'


    AB01,30,16,11,9,3,2,30,30,16,9,3,2 159
    AC02,14,6,12,1,0,7,14,,14,6,1,0,5 75
    AD03,4,0,11,3,0,,1,4,0,,4,0,3,8 27
    AF09,6,3,16,0,0,,3,6,0,6,3,0,6 43

    分组求和

    awk '{s[$1] += $2}END{ for(i in s){ print i, s[i] } }' file1 > file2

    以第一列 为变量名 第一列为变量,将相同第一列的第二列数据进行累加 打印出和

    awk '{s[$1" "$2] += $3}END{ for(i in s){ print i, s[i] } }' file1 > file2

    以第一列和第二列为变量名, 将相同第一列、第二列的第三列数据进行累加 打印出和

    awk '{s[$1] += $2; a[$1] += $3 }END{ for(i in s){ print i,s[i],a[i] } }' haha.txt

    如果第一列相同,则根据第一列来分组,分别打印第二列和第三列的和

    awk '{if(/404/)sum[$1]++}END{for (i in sum) print i,sum[i]}' 123.txt

    取最大值、最小值

    1、针对(2列的文件)

    awk '{max[$1]=max[$1]>$2?max[$1]:$2}END{for(i in max)print i,max[i]}'   file

    第一列不变,取第二列分组最大值

    awk '{if(!min[$1])min[$1]=20121231235959;min[$1]=min[$1]<$2?min[$1]:$2}END{for(i in min)print i,min[i]}'  file

     第一列不变,取第二列分组最小值

    2、针对单列的文件

    awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}' file2

    awk 'BEGIN {min = 1999999} {if ($1<min) min="$1" fi}="" end="" {print="" "min=", min}' file2

      

    求和、求平均值、求标准偏差

    求和

    cat data|awk '{sum+=$1} END {print "Sum = ", sum}'

    求平均

    cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'

    求标准偏差

    cat $FILE | awk -v ave=$ave '{sum+=($1-ave)^2}END{print sqrt(sum/(NR-1))}'

    整合行和列

    1、列换成行

      如果第一列相同,将所有的第二列 第三列 都放到一行里面

     awk '{qq[$1]=qq[$1](" "$2" "$3)}END{for(i in qq)print i,qq[i]}'

  • 相关阅读:
    Linux的命令、用户、权限管理
    Java中快捷键
    数组的学习
    Java中方法定义和调用的学习
    java中的标识符、修饰符、关键字
    MYSQL的学习
    JavaScript小白教程2
    navicat中选择utf-8时的困惑
    python小白教程
    英语单词
  • 原文地址:https://www.cnblogs.com/chengxuyonghu/p/14782617.html
Copyright © 2011-2022 走看看