고유 식별자를 사용하여 파일을 반복하고 누적 합계를 계산합니다.

고유 식별자를 사용하여 파일을 반복하고 누적 합계를 계산합니다.

아래와 같이 큰 텍스트 파일이 있습니다. 여기서 column1-colum3은 범위를 정의하고 네 번째 열은 고유 식별자입니다. 열 6은 구역에 대해 지정된 값입니다.

chr6    26204834    26204839    region1 +   119.862 chr6    26204834    26204835    +   0.982
chr6    26204834    26204839    region1 +   119.862 chr6    26204835    26204836    +   8.487
chr6    26204834    26204839    region1 +   119.862 chr6    26204836    26204837    +   2.664
chr6    26204834    26204839    region1 +   119.862 chr6    26204837    26204838    +   105.065
chr6    26204834    26204839    region1 +   119.862 chr6    26204838    26204839    +   2.664
chr18   72218300    72218307    region2 +   113.879 chr18   72218300    72218301    +   0.982
chr18   72218300    72218307    region2 +   113.879 chr18   72218303    72218304    +   1.357
chr18   72218300    72218307    region2 +   113.879 chr18   72218304    72218305    +   4.887
chr18   72218300    72218307    region2 +   113.879 chr18   72218305    72218306    +   1.706
chr18   72218300    72218307    region2 +   113.879 chr18   72218306    72218307    +   104.947

여기서 컬럼7-열9는 하위 지역이고, 여기서 컬럼11은 하위 지역의 지정된 값입니다.

결과: 각 식별자의 각 소구역에 누적 합계를 할당하고 싶습니다.

cat input | grep region1 | awk '{ sum+=$11 } { print $0"\t"sum/$6 }'

이는 식별자에 대한 올바른 예상 출력을 제공합니다.

chr6    26204834    26204839    region1 +   119.862 chr6    26204834    26204835    +   0.982   0.00819276
chr6    26204834    26204839    region1 +   119.862 chr6    26204835    26204836    +   8.487   0.0789992
chr6    26204834    26204839    region1 +   119.862 chr6    26204836    26204837    +   2.664   0.101225
chr6    26204834    26204839    region1 +   119.862 chr6    26204837    26204838    +   105.065 0.977774
chr6    26204834    26204839    region1 +   119.862 chr6    26204838    26204839    +   2.664   1

다른 식별자에도 동일하게 적용됩니다.

cat input | grep region2 | awk '{ sum+=$11 } { print $0"\t"sum/$6 }' 


chr18   72218300    72218307    region2 +   113.879 chr18   72218300    72218301    +   0.982   0.00862319
chr18   72218300    72218307    region2 +   113.879 chr18   72218303    72218304    +   1.357   0.0205393
chr18   72218300    72218307    region2 +   113.879 chr18   72218304    72218305    +   4.887   0.0634533
chr18   72218300    72218307    region2 +   113.879 chr18   72218305    72218306    +   1.706   0.0784341
chr18   72218300    72218307    region2 +   113.879 chr18   72218306    72218307    +   104.947 1

배열의 모든 식별자를 정의하고 텍스트 파일을 실행하여 이를 자동화하려면 어떻게 해야 합니까?

답변1

한 가지 방법은 다음과 같습니다.

$ awk -vOFS='\t' '{ a[$4]+=$11/$6; print $0,a[$4]}' file 
chr6    26204834    26204839    region1 +   119.862 chr6    26204834    26204835    +   0.982   0.00819276
chr6    26204834    26204839    region1 +   119.862 chr6    26204835    26204836    +   8.487   0.0789992
chr6    26204834    26204839    region1 +   119.862 chr6    26204836    26204837    +   2.664   0.101225
chr6    26204834    26204839    region1 +   119.862 chr6    26204837    26204838    +   105.065 0.977774
chr6    26204834    26204839    region1 +   119.862 chr6    26204838    26204839    +   2.664   1
chr18   72218300    72218307    region2 +   113.879 chr18   72218300    72218301    +   0.982   0.00862319
chr18   72218300    72218307    region2 +   113.879 chr18   72218303    72218304    +   1.357   0.0205393
chr18   72218300    72218307    region2 +   113.879 chr18   72218304    72218305    +   4.887   0.0634533
chr18   72218300    72218307    region2 +   113.879 chr18   72218305    72218306    +   1.706   0.0784341
chr18   72218300    72218307    region2 +   113.879 chr18   72218306    72218307    +   104.947 1

비결은 로케일 식별자를 연관 배열의 키( a이 경우)로 사용하는 것입니다. 그런 다음 파일을 읽을 때 해당 키와 관련된 값을 늘릴 수 있습니다.

관련 정보