awkを使用して数式を新しい列として追加する

awkを使用して数式を新しい列として追加する

bedファイルがあり、次の.bedファイルで3番目と9番目の列の少数率を生成する新しい列を最後に入力しようとしています(したがって、3番目の列は3番目と9番目の列の合計に分割されます)。 :

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

おすすめ記事