管道awk输出到另一个awk命令

时间:2018-01-25 10:16:51

标签: awk process-substitution

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

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 += $6 } END { print total }' file

第7栏的总和:

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

然后将第6列的总和除以第7列的总和。

是否可以在一个命令中完全执行此操作?像bash中的进程替换一样?

1 个答案:

答案 0 :(得分:3)

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

awk '{sum6+=$6;sum7+=$7} 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 Edon爵士一起添加非单线形式的解决方案&# 39; s建议包括逻辑,如果第7列的总和是0,那么它不会在输出中抛出错误。

awk '{
  sum6+=$6;
  sum7+=$7
}
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