아래와 같이 큰 텍스트 파일이 있습니다. 여기서 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
이 경우)로 사용하는 것입니다. 그런 다음 파일을 읽을 때 해당 키와 관련된 값을 늘릴 수 있습니다.