从包含2列的多个文件中添加仅一列的每一行的值 - shell脚本

时间:2016-02-13 17:04:01

标签: shell add lines

我有许多具有此结构的文件,其中包含两列数字。我想为我的所有文件添加第二列的每个行值,所以我最终只会得到一个文件。有人可以帮忙吗?希望这个问题很清楚。感谢。

2 个答案:

答案 0 :(得分:0)

假设你想要的是每个文件第二列的所有值的总和,对于awk来说它看起来就像一个简单的工作:

cat files | awk '{ sum += $2 } END { print sum }'

答案 1 :(得分:0)

以下是基于上述评论中提供的信息OP:

  1. 我们有多个文件,我们必须对每个文件的第二列求和。据我们所知,我们可能有数百或数千个不同的文件
  2. 每个文件中的第一列似乎并不重要,我将假设(基于OP示例数据)我们在每个输入文件中都有相同的(第一列)
  3. 基本思路是从一个空摘要(文件tot),paste一个接一个地开始每个文件tot和第2和第4列(如果存在)到新tot文件的第二列。

    换句话说......

    $ touch tot ; for f in * ; do paste tot ${f} | awk '{ if ( NF > 3 ) { print $1, $2+$4 } else { print $1, $2 } }' > tmp ; mv tmp tot ; done 
    

    我用8个不同的文件测试了它,似乎按预期工作。 当然,必须更改for f in *才能捕获所有和我们想要求和的文件。