计算文件中每列的总和

May*_*hux 10 command-line scripts

在以空格“ ”分隔的列数不同的文件中,如何计算列的总和。一个例子将表明需要:

File A:

1 2 
2 3
4 5 6 
1 1 1 5
Run Code Online (Sandbox Code Playgroud)

那么输出将是:

  • 对于第 1 列 (1+2+4+1)=8
  • 对于第 2 列是 11
  • 第 3 列是 7
  • 第 4 列是 5

ste*_*ver 12

使用 awk

awk '{for (i=1;i<=NF;i++) sum[i]+=$i;}; END{for (i in sum) print "for column "i" is " sum[i];}' FileA
for column 1 is 8
for column 2 is 11
for column 3 is 7
for column 4 is 5
Run Code Online (Sandbox Code Playgroud)


A.B*_*.B. 5

使用numsum该任务和数据处理和输出结果之间是分开的。

安装num-utils,我们需要numsum

sudo apt-get install num-utils
Run Code Online (Sandbox Code Playgroud)

并开始

numsum -c <your_file_name>
Run Code Online (Sandbox Code Playgroud)

例子

$ cat "File A"
1 2 
2 3
4 5 6 
1 1 1 5

$ numsum -c "File A"
8 11 7 5
Run Code Online (Sandbox Code Playgroud)

或使用您想要的格式:

$ numsum -c "File A" | awk '{for(i=1;i<=NF;i++) {print "for column "i" is "$i}}'
for column 1 is 8
for column 2 is 11
for column 3 is 7
for column 4 is 5
Run Code Online (Sandbox Code Playgroud)

man numsum

-c      Print out the sum of each column.
Run Code Online (Sandbox Code Playgroud)

例子来自 man numsum

EXAMPLES

   Add up the 1st, 2nd and 5th columns only.

       $ numsum -c -x 1,2,5 columns
       15 40 115

   Add up the rows of numbers of a file.

        $ numsum -r columns
        55
        60
        65
        70
        75
Run Code Online (Sandbox Code Playgroud)


Flo*_*sch 3

#!/bin/sh

while read a b c d; do
    col1=$((col1 + a))
    col2=$((col2 + b))
    col3=$((col3 + c))
    col4=$((col4 + d))
done < File_A

echo $col1 $col2 $col3 $col4
Run Code Online (Sandbox Code Playgroud)


May*_*hux -2

一个简单的解决方案:

awk '{sum += $i} END {print sum}' file
Run Code Online (Sandbox Code Playgroud)

将 i 替换为列号,例如 column1:

awk '{sum += $1} END {print sum}' file
Run Code Online (Sandbox Code Playgroud)

输出是:

8
Run Code Online (Sandbox Code Playgroud)

  • 这只会给你一列。你没有达到你自己的规格。 (3认同)