숫자 값을 두 값으로 다시 포맷합니다. [닫기]

숫자 값을 두 값으로 다시 포맷합니다. [닫기]

많은 열과 숫자 값 행이 포함된 거대한 파일이 있습니다. 6열 이후 열의 값은 숫자에 누락된 부분 NA ( 0또는 1또는 2) 이 더해진 값입니다 NA.

7열부터 시작하는 모든 열의 값을 다음과 같이 변경하고 싶습니다. 0로 변경 A A, 1로 변경 A B, 2로 변경 B B, 로 NA변경 0 0. 이렇게 하면 7열에서 시작하는 제목이 두 번 표시됩니다. 을 사용하여 이 작업을 수행할 수 있나요 awk? 내 입력 파일은 다음과 같지만 그 뒤에는 많은 열이 있습니다. 내 출력 파일은 탭으로 구분되어야 합니다.

id1 id2 parental    maternal    sex phenotype   A_101   A_102   A_103   
20907153    20907153    0   0   -9  -9  1   0   0   0   0   0   
31405729    31405729    0   0   -9  -9  0   0   0   0   0   0   
31450731    31450731    0   0   -9  -9  0   0   0   2   0   0   
41940308    41940308    0   0   -9  -9  0   0   0   NA  0   0   
52428081    52428081    0   0   -9  -9  0   0   0   0   0   0   
41943104    41943104    0   0   -9  -9  0   0   0   0   0   0   

답변1

조금 길지만 간단합니다.

awk '{ for (i=7; i<=NF; i++) { if ($i=="0"){ sub(0,"A A",$i) } else if ($i=="1"){ sub(1,"A B",$i) } else if ($i=="2") {sub(2,"B B",$i) } else if ($i=="NA") { sub("NA","0 0",$i) }} print $0}' inputfile.txt

필드 번호가 7보다 크면 각 필드를 반복하고 기준 중 하나가 충족되면 필드를 해당 쌍으로 바꿉니다. 루프 다음에 전체 줄을 인쇄합니다.

나에게 이것은 다음을 반환합니다.

id1 id2 parental    maternal    sex phenotype   A_101   A_102   A_103
20907153 20907153 0 0 -9 -9 A B A A A A A A A A A A
31405729 31405729 0 0 -9 -9 A A A A A A A A A A A A
31450731 31450731 0 0 -9 -9 A A A A A A B B A A A A
41940308 41940308 0 0 -9 -9 A A A A A A 0 0 A A A A
52428081 52428081 0 0 -9 -9 A A A A A A A A A A A A
41943104 41943104 0 0 -9 -9 A A A A A A A A A A A A

관련 정보