다른 열이 나타내는 위치에 있는 한 열의 문자를 다른 열의 문자열로 바꾸는 방법

다른 열이 나타내는 위치에 있는 한 열의 문자를 다른 열의 문자열로 바꾸는 방법

저는 생물정보학을 처음 접했고(이것이 첫 번째 게시물입니다!) 저를 괴롭히는 작업에 도움이 필요합니다.

세 개의 열이 있는 탭으로 구분된 데이터 테이블이 있습니다.

AATTCTTGCA 4 [A/T]
AATTCCTTCG 7 [C/T]
AATTCAACAA 2 [T/C]

두 번째 열이 나타내는 위치에 있는 첫 번째 열의 문자를 세 번째 열의 문자열로 바꾸고 싶습니다. 그러면 출력은 다음과 같습니다.

AAT[A/T]CTTGCA
AATTCC[C/T]TCG
A[T/C]TTCAACAA

저는 지금 다양한 튜토리얼을 따르고 있으며 sed/ 를 사용한 (실패한) 명령이 있으면 게시물을 업데이트하겠습니다 awk.

미리 감사드립니다!

답변1

다음 awk명령으로 작업을 수행해야 합니다.

awk -F"\t" '{printf "%s%s%s%s",substr($1,1,$2-1),$3,substr($1,$2+1),ORS}' input.txt

이 옵션은 -F필드 구분 기호를 로 설정합니다 TAB. 그런 다음 프로그램은 ( printf()함수를 사용하여) 각 줄을 인쇄합니다.

  • 필드 1 처음부터 필드 2에 표시된 문자 위치까지의 하위 문자열(포함하지 않음)
  • 필드 3에 포함된 문자열
  • 필드 2에 표시된 문자 위치에서 시작하여 필드 1의 나머지 부분
  • "출력 레코드 구분 기호", 기본값은 개행입니다.

이는 표시된 문자를 필드 3의 내용으로 효과적으로 대체합니다.

노트돌이켜 보면 그렇게 많은 양의 명시적인 형식 제어는 실제로 불필요했으며 프로그램은 다음과 같이 단축될 수 있었습니다.

awk -F"\t" '{print substr($1,1,$2-1) $3 substr($1,$2+1)}' input.txt

경고하다: 프로그램은 필드 2의 문자 위치가 항상 합리적이라고 가정합니다. 즉, 0보다 크고 필드 1의 전체 길이보다 작거나 같습니다. 파일이 손상된 경우 추가 오류 검사가 필요합니다.

답변2

사용행복하다(이전 Perl_6)

raku -ne 'my ($a,$b,$c) = .split("\t"); substr-rw($a, $b-1, 1) = $c; put $a;' 

입력 예:

AATTCTTGCA  4   [A/T]
AATTCCTTCG  7   [C/T]
AATTCAACAA  2   [T/C]

예제 출력:

AAT[A/T]CTTGCA
AATTCC[C/T]TCG
A[T/C]TTCAACAA

-ne즉, 명령줄 플래그를 사용하여 데이터를 한 줄씩 읽습니다. 각 행은 split탭에 위치하며 스칼라 및 에 $a할당 $b됩니다 $c. "substring-rewrite" 명령은 뉴클레오티드 서열을 substr-rw취하고 $a문자열을 $c길이 1로 정의된 위치에 할당하는 데 사용됩니다(즉, 1개의 뉴클레오티드 교체). $b-1변형된 $a뉴클레오티드 서열이 나옵니다 put.

https://docs.raku.org/routine/substr-rw
https://raku.org

관련 정보