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

관련 정보