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