• linux awk命令实现对数据的每一列进行求和、求平均


    1、测试数据

    root@PC1:/home/test# ls
    test.txt
    root@PC1:/home/test# cat test.txt
    3 4 2 9
    1 3 5 4
    3 7 8 4
    2 3 4 6

    2、对每一列数据进行求和

    root@PC1:/home/test# ls
    test.txt
    root@PC1:/home/test# cat test.txt
    3 4 2 9
    1 3 5 4
    3 7 8 4
    2 3 4 6
    root@PC1:/home/test# for i in `head -n 1 test.txt | awk '{print NF}' | xargs seq`; do awk -v a=$i 'BEGIN{sum = 0} {sum += $a} END{print sum}' test.txt >> sum.txt; done
    root@PC1:/home/test# ls
    sum.txt  test.txt
    root@PC1:/home/test# cat sum.txt  ##求和结果保存为列的形式
    9
    17
    19
    23
    root@PC1:/home/test# paste -d " " -s sum.txt   ## 将列的形式转换为行的形式
    9 17 19 23

    3、对每一列求平均

    root@PC1:/home/test# ls
    test.txt
    root@PC1:/home/test# cat test.txt
    3 4 2 9
    1 3 5 4
    3 7 8 4
    2 3 4 6
    root@PC1:/home/test# for i in `head -n 1 test.txt | awk '{print NF}' | xargs seq `; do awk -v a=$i 'BEGIN{sum = 0} {sum += $a} END {print sum/NR}' test.txt >> mean.txt; done
    root@PC1:/home/test# ls
    mean.txt  test.txt
    root@PC1:/home/test# cat mean.txt
    2.25
    4.25
    4.75
    5.75
    root@PC1:/home/test# paste -d " " -s mean.txt   ## 每一列求平均结果
    2.25 4.25 4.75 5.75

    4、R语言实现

    dir()
    dat <- read.table("test.txt", header = F)
    dat
    apply(dat, 2, sum)
    apply(dat, 2, mean)
    > dir()
    [1] "test.txt"
    > dat <- read.table("test.txt", header = F)  ## 读取测试数据
    > dat
      V1 V2 V3 V4
    1  3  4  2  9
    2  1  3  5  4
    3  3  7  8  4
    4  2  3  4  6
    > apply(dat, 2, sum)     ## 求每一列的和
    V1 V2 V3 V4 
     9 17 19 23 
    > apply(dat, 2, mean)    ## 求每一列的平均数
      V1   V2   V3   V4 
    2.25 4.25 4.75 5.75 
  • 相关阅读:
    Minimum Path Sum
    Unique Paths II
    Unique Paths
    Rotate List
    Permutation Sequence
    Merge Intervals
    Jump Game
    Group Anagrams
    Combination Sum II
    评分
  • 原文地址:https://www.cnblogs.com/liujiaxin2018/p/15804970.html
Copyright © 2020-2023  润新知