How to sum up every 10 lines and calculate average using AWK?

后端 未结 2 1513
轮回少年
轮回少年 2021-01-02 05:18

I have a file containing N*10 lines, each line consisting of a number. I need to sum up every 10 lines and then print out an average for every such group. I know it\'s doabl

相关标签:
2条回答
  • 2021-01-02 05:24

    May be something like this -

    [jaypal:~/Temp] seq 20 > test.file
    
    [jaypal:~/Temp] awk '
    {sum+=$1} 
    (NR%10==0){avg=sum/10;print $1"\nTotal: "sum "\tAverage: "avg;sum=0;next}1' test.file
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Total: 55   Average: 5.5
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Total: 155  Average: 15.5
    

    If you don't want all lines to be printed then the following would work.

    [jaypal:~/Temp] awk '
    {sum+=$1} 
    (NR%10==0){avg=sum/10;print "Total: "sum "\tAverage: "avg;sum=0;next}' test.file
    Total: 55   Average: 5.5
    Total: 155  Average: 15.5
    
    0 讨论(0)
  • 2021-01-02 05:35

    Try something like this:

    $ cat input 
    1
    2
    3
    4
    5
    6
    2.5
    3.5
    4
    $ awk '{sum+=$1} (NR%3)==0{print sum/3; sum=0;}' input 
    2
    5
    3.33333
    

    (Adapt for 10-line blocks, obviously.)

    0 讨论(0)
提交回复
热议问题