유전자형 데이터가 포함된 파일이 있습니다. 두 번째 열에는 아래와 같이 연결된 특정 유전 변이의 두 대립 유전자가 있습니다.
rs969931 CA 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs2745406 CT 0.000 2.000 2.000 1.000 1.000 2.000 1.000 1.000
rs6939431 AG 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
rs1233427 AG 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233426 AG 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233425 GC 1.000 1.999 1.999 2.000 2.000 2.000 1.000 1.000
rs362546 GA 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs909968 AG 0.000 2.000 2.000 1.000 1.000 1.000 1.000 1.000
rs909967 GA 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs886381 AG 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
대립 유전자를 두 개의 별도 열로 사용하여 새 파일을 만들어야 합니다. 즉, 두 번째 열을 두 개의 열로 분할해야 합니다. 아래는 원하는 출력입니다. 이를 달성하기 위해 awk에서 여러 필드 구분 기호를 지정하는 방법이 있습니까?
rs969931 C A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs2745406 C T 0.000 2.000 2.000 1.000 1.000 2.000 1.000 1.000
rs6939431 A G 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
rs1233427 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233426 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233425 G C 1.000 1.999 1.999 2.000 2.000 2.000 1.000 1.000
rs362546 G A 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs909968 A G 0.000 2.000 2.000 1.000 1.000 1.000 1.000 1.000
rs909967 G A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs886381 A G 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
답변1
sub
이 작업을 수행하려면 다음 기능을 사용할 수 있습니다 awk
.
awk 'sub(/./,"& ",$2)1;' file
탭으로 구분된 출력을 원하면 다음을 사용할 수 있습니다.
awk -v OFS="\t" 'sub(/./,"&\t",$2)1;' file
또는 다양한 다른 도구에서:
진주
perl -alne '$F[1]=~s/./$& /; print "@F"' file
또는 탭으로 구분된 출력의 경우:
perl -alne '$F[1]=~s/./$&\t/; print join "\t",@F' file
암소 비슷한 일종의 영양
sed
sed -r 's/\S+\s+\S/& /' file
다른
sed
sed 's/^[[:alnum:]]*[[:blank:]]*./& /' file
껍데기
while read -r snp nt rest; do printf "%s\t%s\t%s\t%s\n" "$snp" "${nt:0:1}" "${nt:0:1}" "$rest" done < file
답변2
사용 gsub
:awk
awk 'gsub(""," ",$2)1' file
결과:
rs969931 C A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs2745406 C T 0.000 2.000 2.000 1.000 1.000 2.000 1.000 1.000
rs6939431 A G 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
rs1233427 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233426 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233425 G C 1.000 1.999 1.999 2.000 2.000 2.000 1.000 1.000
rs362546 G A 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs909968 A G 0.000 2.000 2.000 1.000 1.000 1.000 1.000 1.000
rs909967 G A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs886381 A G 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000