다음과 같이 수백만 개의 쌍을 이루는 시퀀스가 포함된 fasta 파일이 있습니다.
>7001289F:56:HKH3FBCXX:2:1101:1692:2074 1:N:0:CGATGT
GAGCAGAGGCACCGCTGAGCAGACAGCGAGCGAGTGAAGGGGTCAGGGGCCAGTCAGCAATCTCGTGTAGAAAGAATCACGGTCGAGCGGTGCACGCATG
>NNNNN
GACACCTTCATTTCCACTTTATTGAGCAGCGGCGCATGCGTGCACCGCTCGACCGTGATTCTTTCTACACGAGATTGCTGACTGGCCCCTGACCCCTTCA
>7001289F:56:HKH3FBCXX:2:1101:1522:2186 1:N:0:CGATGT
GTAGATGATGAATACAGCTGTTGCTGCAGCAACTGGTGCTGAGTAAGCAACTGCGATCCATGGACGCATACCTAAACGGAAAGATAATTCCCAC
>NNNNN
GTGGGAATTATCTTTCCGTTTAGGTATGCGTCCATGGATCGCAGTTGCTTACTCAGCACCAGTTGCTGCAGCAACAGCTGTATTCATCATCTAC
다음과 같이 형식을 지정해야 합니다.
>7001289F:56:HKH3FBCXX:2:1101:1692:2074 1:N:0:CGATGT
GAGCAGAGGCACCGCTGAGCAGACAGCGAGCGAGTGAAGGGGTCAGGGGCCAGTCAGCAATCTCGTGTAGAAAGAATCACGGTCGAGCGGTGCACGCATGNNNNNGACACCTTCATTTCCACTTTATTGAGCAGCGGCGCATGCGTGCACCGCTCGACCGTGATTCTTTCTACACGAGATTGCTGACTGGCCCCTGACCCCTTCA
>7001289F:56:HKH3FBCXX:2:1101:1522:2186 1:N:0:CGATGT
GTAGATGATGAATACAGCTGTTGCTGCAGCAACTGGTGCTGAGTAAGCAACTGCGATCCATGGACGCATACCTAAACGGAAAGATAATTCCCACNNNNNGTGGGAATTATCTTTCCGTTTAGGTATGCGTCCATGGATCGCAGTTGCTTACTCAGCACCAGTTGCTGCAGCAACAGCTGTATTCATCATCTAC
기본적으로 복잡한 헤더는 DNA 서열의 정방향 읽기를 나타내고, NNNNN 헤더와 함께 해당 역방향 읽기를 나타내는 헤더가 뒤따릅니다. 이러한 역방향 읽기를 NNNNN으로만 구분된 정방향 읽기에 추가해야 하지만 sed로 줄바꿈을 제거하기는 어렵습니다. 누구든지 이것을 설명할 수 있나요?
답변1
파일이 메모리에 들어갈 만큼 작은 경우 다음을 수행할 수 있습니다.
perl -00pe 's/\n>(NNNNN)\n/$1/g' file
파일이 RAM에 로드하기에는 너무 크기 때문에 다음 명령을 사용할 수 있습니다.
$ perl -pe '$c++; if($c==2){chomp}
elsif($c==3){s/[>\n]//g;}
elsif($c==4){$c=0}' file.fa
>7001289F:56:HKH3FBCXX:2:1101:1692:2074 1:N:0:CGATGT
GAGCAGAGGCACCGCTGAGCAGACAGCGAGCGAGTGAAGGGGTCAGGGGCCAGTCAGCAATCTCGTGTAGAAAGAATCACGGTCGAGCGGTGCACGCATGNNNNNGACACCTTCATTTCCACTTTATTGAGCAGCGGCGCATGCGTGCACCGCTCGACCGTGATTCTTTCTACACGAGATTGCTGACTGGCCCCTGACCCCTTCA
>7001289F:56:HKH3FBCXX:2:1101:1522:2186 1:N:0:CGATGT
GTAGATGATGAATACAGCTGTTGCTGCAGCAACTGGTGCTGAGTAAGCAACTGCGATCCATGGACGCATACCTAAACGGAAAGATAATTCCCACNNNNNGTGGGAATTATCTTTCCGTTTAGGTATGCGTCCATGGATCGCAGTTGCTTACTCAGCACCAGTTGCTGCAGCAACAGCTGTATTCATCATCTAC
설명하다
perl -pe '...' file.fa
: 입력 파일의 각 줄에 대해file.fa
주어진 스크립트를 실행하고 린트합니다.-e
-p
$c++
: 변수를 한 줄에 하나씩 증가시킵니다$c
.if($c==2){chomp}
$c
: 현재 값이 이면2
줄 끝의 줄 바꿈을 제거합니다. 이는 순방향 시퀀스의 행과 일치합니다.elsif($c==3){s/[>\n]//g;}
:$c
그렇다면 줄3
바꿈 문자를>NNNNN
제거하세요 .>
elsif($c==4){$c=0}'
:$c
그렇다면4
재설정하십시오0
.
이는 쌍 읽기를 가정합니다. 파일의 모든 정방향 읽기에 대해 정확히 하나의 역방향 읽기가 없으면 실패합니다. 또한 시퀀스가 한 줄에 있다고 가정합니다. Fasta 파일은 일반적으로 시퀀스당 여러 줄로 구성되며 기본적으로 60자로 잘립니다. 이는 최근 몇 년 동안 변경되었지만 형식은 여전히 여러 줄 시퀀스를 허용합니다.