많은 열과 숫자 값 행이 포함된 거대한 파일이 있습니다. 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