【问题标题】:Summing values of a column using awk command使用 awk 命令对列的值求和
【发布时间】:2015-04-11 06:33:30
【问题描述】:

我想对第 3 列中所有行的值求和。我该怎么做?

输入:

chr19   10 11
chr19   12 15
chr19   11 29
chr19   a0 20

预期输出:

75

【问题讨论】:

  • 只是为了好玩,perl 高尔夫:perl -ape'$s+=$F[2]}{$_=$s' file
  • 只是为了好玩,awk 高尔夫:awk '{s+=$3}END{print s}' file。前面! :-)。
  • @Ed Morton:每个人都在建议相同的命令,但是这个命令错过了第一行的值。对于我的示例,我得到 64 而不是 75。
  • 您必须有一些控制字符破坏了您的输入文件,可能是 Windows 程序插入的 control-M。尝试cat -v 来查看它们并尝试dos2unix 或类似方式来删除它们

标签: awk


【解决方案1】:

只需将第三列的值存储到一个变量中,然后将该值与下一行第三列中存在的值相加,同样适用于所有变量。 Atlast,变量 count 包含第三列中所有数字的总和。

$ awk '{count=count+$NF}END{print count}' file
75
$ awk '{count=count+$3}END{print count}' file
75

【讨论】:

  • 非常感谢您的评论。但我得到的总和是 64 而不是 75。缺少第一行的值。我也尝试过其他输入,但总是缺少第一行的值。你有什么建议吗?
  • 奇怪!这怎么可能?
  • awk 'NR==1{print $3}' file 的输出是什么?
  • 抱歉,我复制了您的命令并运行了我的示例数据,但没有返回任何值。它适用于你的情况吗?我还使用了之前评论中使用过的命令 (awk '{s+=$3}END{print s}'),但它也错过了第一行的值。
  • 再次感谢。但我的第一排不是黑色的。我尝试了另一个 3*3 矩阵数据的例子。但是,它计算了第 3 列的最后两行。chr19 2006983 2007235 chr19 2041129 2041498 chr19 2042479 2042848 输出为4084346,这意味着2041498+ 2042848
【解决方案2】:
awk '{SUM+=$3}END{print SUM}'

其中 $3 代表第 3 列的值

【讨论】:

  • 此命令不添加列的第一行。有什么解决办法吗?
  • 基于问题不是“第 3 列中的所有行”?...请告知我,因为该命令对第 3 列中的所有行求和....预期输出为 75
  • 使用命令,我得到的总和是 64 而不是 75。缺少第一行的值。
  • 第一行与问题中描述的完全一样,所有数据都用空格或多个空格分隔?
  • 您可以发布实际数据吗?还是这是实际数据?
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 2013-06-28
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
相关资源
最近更新 更多