使用 awk 添加公式作为新列

使用 awk 添加公式作为新列

我有一个 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

相关内容