![使用 awk 添加公式作为新列](https://linux22.com/image/15145/%E4%BD%BF%E7%94%A8%20awk%20%E6%B7%BB%E5%8A%A0%E5%85%AC%E5%BC%8F%E4%BD%9C%E4%B8%BA%E6%96%B0%E5%88%97.png)
我有一个 bed 文件,我想在末尾输入一个新列,该列从以下 .bed 文件生成第三列和第九列的小数比(因此第三列除以第三列和第九列的总和):
chr1H 4612679 57 42 76 85 142 37 155
chr1H 4612680 60 43 83 89 145 38 160
chr1H 4612681 60 45 83 90 144 38 163
chr1H 4612682 60 45 85 98 148 38 164
chr1H 4612683 60 46 86 99 147 39 164
chr1H 4612684 60 46 86 99 147 39 164
chr1H 4612685 61 46 89 99 149 41 168
chr1H 4612686 62 46 92 100 150 42 168
我读过多篇文章,但我正在努力解决这个公式。我试过awk -F '\t' '{$(NF+1)= $3 / sum += $3, $9; print}' file.bed
。这是一个制表符分隔的文件,但我觉得我还遗漏了一些东西。我希望它看起来像这样:
chr1H 4612679 57 42 76 85 142 37 155 0.268867925
chr1H 4612680 60 43 83 89 145 38 160 0.272727273
chr1H 4612681 60 45 83 90 144 38 163 0.269058296
chr1H 4612682 60 45 85 98 148 38 164 0.267857143
chr1H 4612683 60 46 86 99 147 39 164 0.267857143
chr1H 4612684 60 46 86 99 147 39 164 0.267857143
chr1H 4612685 61 46 89 99 149 41 168 0.266375546
chr1H 4612686 62 46 92 100 150 42 168 0.269565217
谢谢你的帮助!
答案1
调整数字到字符串转换的格式CONVFMT
(默认%.6g
):
awk 'BEGIN{ OFS=FS="\t"; CONVFMT="%.9f" }
{ $(NF+1)=($3/($3+$9)); print }
' file.bed
相同的结果,无需分配给新字段并更改数字输出格式OFMT
(默认也是%.6g
):
awk 'BEGIN{ OFS=FS="\t"; OFMT="%.9f" }
{ print $0, ($3/($3+$9)) }
' file.bed