Aradu.A03 9514 9527 CC TC
Aradu.A03 15236 15265 CC CT
Aradu.A03 36585 36621 TG TA
Aradu.A03 36621 36666 GA AA
Aradu.A03 42976 42981 CT TC
Aradu.A03 63785 63843 GG GT
Aradu.A03 63843 63852 GG TG
Aradu.A03 79931 79958 CC AC
Aradu.A03 102072 102077 GT GC
Aradu.A03 102077 102085 TC CA
Aradu.A03 102087 102095 CG TG
Aradu.A03 102097 102106 CA TA
Aradu.A03 102111 102115 TC TT
awk
Aradu.A03_val
열 4와 5의 첫 번째 뉴클레오티드가 서로 다른 경우 스크립트는 두 번째 열의 출력을 가져오고,
Aradu.A03_val
열 4와 5의 두 번째 뉴클레오티드가 서로 다른 경우 세 번째 열의 출력을 가져옵니다.
답변1
$ awk '{ split($4, a1, ""); split($5, a2, ""); for (i in a1) { if (a1[i] != a2[i]) print $1 "_" $(i+1) }}' file
Aradu.A03_9514
Aradu.A03_15265
Aradu.A03_36621
Aradu.A03_36621
Aradu.A03_42981
Aradu.A03_42976
Aradu.A03_63843
Aradu.A03_63843
Aradu.A03_79931
Aradu.A03_102077
Aradu.A03_102085
Aradu.A03_102077
Aradu.A03_102087
Aradu.A03_102097
Aradu.A03_102115
스크립트 awk
는 4열과 5열의 값을 배열 합계로 분할한 다음 a1
( a2
예를 들어 TA
4열의 값이 합계로 분할됨 T
) 쌍별로 테스트합니다. 두 배열의 값이 다른 경우 첫 번째 열의 문자열과 열 2 또는 3의 해당 값이 밑줄로 인쇄됩니다.A
a1
두 뉴클레오티드가 다르면 두 줄의 출력이 생성됩니다.
답변2
앗해결책:
awk '{ r=$1"_"; if (substr($4,1,1) != substr($5,1,1)) print r$2;
else if (substr($4,2,1) != substr($5,2,1)) print r$3 }' file
산출:
Aradu.A03_9514
Aradu.A03_15265
Aradu.A03_36621
Aradu.A03_36621
Aradu.A03_42976
Aradu.A03_63843
Aradu.A03_63843
Aradu.A03_79931
Aradu.A03_102077
Aradu.A03_102077
Aradu.A03_102087
Aradu.A03_102097
Aradu.A03_102115