길이가 같은 두 개의 문자열 목록이 있습니다.
예:
String A1: ATTCAGAATG
String A2: TGCCAGATAC
String B1: 0010011010
String B2: 0111010100
A1과 B1, A2와 B2 등을 문자별로 비교하고 B 문자열의 동일한 위치에 1이 있으면 A 문자열의 문자를 수정하고 싶습니다. 문자열 B의 문자가 0이면 그대로 두고 싶습니다.
A1과 B1을 비교한 결과는 이어야 하며 ATxCAxxAxG
, 이를 세 번째 파일에 저장하고 싶습니다.
크기와 길이가 동일한 두 개의 텍스트 파일이 있으며 각각 한 줄에 시퀀스가 포함되어 있습니다. 프로세스가 완료되면 두 파일을 병합한 동일한 크기와 길이의 세 번째 파일이 있어야 합니다.
이것은 일회성 작업이므로 해키적인 작업을 수행하기 위해 bash 또는 다른 것을 사용할 의향이 있습니다. 하지만 다른 스크립트나 간단한 C 프로그램이 상황을 처리하는 더 합리적인 방법이라면 기꺼이 그렇게 할 것입니다. 저것.
이 문제를 해결하는 가장 쉬운 방법에 대한 제안 사항이 있습니까?
답변1
paste file1 file2 |\
awk '{
len=length($1)
for(char=1; char<=len; char++)
printf (substr($0, char+len+1, 1)+0)? "x" : substr($0, char, 1)
print ""
}'
답변2
paste <(od -An -vtu1 -w1 fileA) <(od -An -vtu1 -w1 fileB) \
| awk 'NF!=2{exit}; {printf "%c", $2==49?120:$1}'
49는 ASCII의 10진수 값 1
이고 120은 ASCII의 10진수 값입니다 x
.
요구 사항은 연결된 답변에 나와 있습니다.
프로세스 대체를 지원하는 쉘(예: GNU 쉘), 옵션을
od
지원 하는 쉘-w
(예: GNU 쉘od
), [...]
두 파일은 바이트 단위로 완벽하게 정렬되어야 합니다. 일반적으로 "바이트별"은 요청한 "문자별"과 동일하지 않지만 , A
, C
, G
및 T
개행 문자 0
가 포함된 1
파일에는 차이가 없습니다 .