我有一个制表符分隔文件:
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中的进程替换一样?
答案 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