저는 생물정보학을 처음 접했고(이것이 첫 번째 게시물입니다!) 저를 괴롭히는 작업에 도움이 필요합니다.
세 개의 열이 있는 탭으로 구분된 데이터 테이블이 있습니다.
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
.