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