将 awk 输出通过管道传输到另一个 awk 命令

piping awk outputs into another awk command

我有一个这样的制表符分隔文件:

1   68082   68082   0.003   0.0984  0.0845750981305074  1
1   69428   69428   0.0015  0.0497  0.04367900961171486 1
1   69761   69761   0.0045  0.1034  0.09005130799195755 1
1   69899   69899   0.0106  0.001   0.012825357055808327    1
1   70352   70352   0.0356  0.002   0.04128979333631639 1
1   136113  136113  0.0015  0.0278  0.02540996544374495 1
1   138396  138396  0.0008  0.0089  0.008567211104293392    1
1   872352  872352  0.4955  0.2803  0.48119634372979975 1
1   872467  872467  0.0121  0.004   0.01705890110859077 1
1   872564  872564  0.0015  0.002   0.0034277132094182  1

我想得到第 6 列的总和:

awk -F'[\t]' '{ total +=  } END { print total }' file

第 7 列的总和:

awk -F'[\t]' '{ total +=  } END { print total }' file

然后用第6列的总和除以第7列的总和

是否可以在一个命令中完全完成此操作? bash?

中的过程替换之类的东西

如果我们只需要打印第 6 和第 7 个字段的总和,以下 awk 可能会对您有所帮助。

awk '{sum6+=;sum7+=} END{print "Sum of column 6:",sum6 RS "sum of column 7:",sum7;print "Divide of sum6 and sum7",sum6/sum7}' Input_file

输出如下。

Sum of column 6: 0.808081
sum of column 7: 10
Divide of sum6 and sum7 0.0808081

编辑: 解决方案 2: 添加一种非线性形式的解决方案以及 Ed Morton 爵士的建议,其中包括第 7 列总和为 0 的逻辑,那么它不会在输出中引发错误。

awk '{
  sum6+=;
  sum7+=
}
END{
  print "Sum of column 6:",sum6 ORS "sum of column 7:",sum7;print "Divide of sum6 and sum7",sum7?sum6/sum7:"you are trying to divide with a 0, seems sum7 is zero."
}'   Input_file