동일한 크기의 두 파일을 문자별로 비교하여 동일한 크기의 1/3을 생성합니다.

동일한 크기의 두 파일을 문자별로 비교하여 동일한 크기의 1/3을 생성합니다.

길이가 같은 두 개의 문자열 목록이 있습니다.

예:

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, GT개행 문자 0가 포함된 1파일에는 차이가 없습니다 .

관련 정보