file1
헤더 줄이 포함된 파일( )과 fasta 형식의 시퀀스인 다른 파일( ) 이 있습니다 file2
. file1
의 헤더 행이 있는 경우 fasta 시퀀스를 grep하고 싶습니다 file2
.
예:
file1
:>sp|B7UM99|TIR_ECO27 >sp|P06616|ERA_ECOLI
file2
:>sp|B7UM99|TIR_ECO27 MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA RGGTGHLISSTGALGSRSLFSPLRNSMADS VDSRDIPGLPTNPSRLAAATSETCLLGGFE VLHDKGPLDILNTQIGPSAFRVEVQADGTH ...... >sp|P06616|ERA_ECOLI MSIDKSYCGFIAIVGRPNVGKSTLLNKLL GQKISITSRKAQTTRHRIVGIHTEGAYQAIY VDTPGLHMEEKRAINRLMNKAASSSIGDVE LVIFVVEGTRWTPDDEMVLNKLREGKAPVI ............ >sp|P0AD68|HUMAN MKAAAKTQKPKRQEEHANFISWRFALLCGC ILLALAFLLGRVAWLQVISPDMLVKEGDMR SLRVQQVSTSRGMITDRSGRPLAVSVPVKA IWADPKEVHDAGGISVGDRWKALANALNIP .............
- 원하는 출력
>sp|B7UM99|TIR_ECO27 MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA RGGTGHLISSTGALGSRSLFSPLRNSMADS VDSRDIPGLPTNPSRLAAATSETCLLGGFE VLHDKGPLDILNTQIGPSAFRVEVQADGTH ...... >sp|P06616|ERA_ECOLI MSIDKSYCGFIAIVGRPNVGKSTLLNKLL GQKISITSRKAQTTRHRIVGIHTEGAYQAIY VDTPGLHMEEKRAINRLMNKAASSSIGDVE LVIFVVEGTRWTPDDEMVLNKLREGKAPVI ............
답변1
Fasta 파일이 주어지면 해당 시퀀스 동작동일한 길이,
$ cat file.fa
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLLG
QKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
>sp|P0AD68|HUMAN
MKAAAKTQKPKRQEEHANFISWRFALLCGC
ILLALAFLLGRVAWLQVISPDMLVKEGDMR
SLRVQQVSTSRGMITDRSGRPLAVSVPVKA
IWADPKEVHDAGGISVGDRWKALANALNIP
.............
시퀀스 이름이 포함된 쿼리 파일,
$ cat query
sp|B7UM99|TIR_ECO27
sp|P06616|ERA_ECOLI
그 다음에samtools
다음과 같이 사용할 수 있습니다.
$ samtools faidx file.fa -r query
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAARGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFEVLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLLGQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVELVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
답변2
fastagrep
원하는 것을 수행하는 것처럼 보이는 유틸리티가 있습니다 . 귀하의 데이터는 data1 및 data2 파일에 있습니다.
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
pl " Input data file $FILE1:"
head -20 $FILE1
pl " Input data file $FILE2:"
head -20 $FILE2
pl " Expected output:"
cat $E
pl " Results:"
fastagrep -f $FILE1 $FILE2
생산:
-----
Input data file data1:
>sp|B7UM99|TIR_ECO27
>sp|P06616|ERA_ECOLI
-----
Input data file data2:
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
>sp|P0AD68|HUMAN
MKAAAKTQKPKRQEEHANFISWRFALLCGC
ILLALAFLLGRVAWLQVISPDMLVKEGDMR
SLRVQQVSTSRGMITDRSGRPLAVSVPVKA
IWADPKEVHDAGGISVGDRWKALANALNIP
-----
Expected output:
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
-----
Results:
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
이것은 다음과 같은 시스템에 있습니다.
OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution : Debian 8.11 (jessie)
perl 5.20.2
fastagrep의 세부사항:
fastagrep extract sequences from a multi-FASTA file by regex. (what)
Path : ~/bin/fastagrep
Version : fastagrep version 0.3
Length : 392 lines
Type : Perl script, ASCII text executable
Shebang : #!/usr/bin/env perl
Home : https://github.com/rec3141/rec-genome-tools (doc)
Modules : (for perl codes)
strict 1.08
warnings 1.23
Getopt::Std 1.10
IO::File 1.16
Data::Dumper 2.151_01
행운을 빕니다... 건배, drl
답변3
이 awk 명령은 아마도 당신이 원하는 것을 할 것입니다:
$ cat file1 | xargs -I{} awk -v tag={} '$0==tag{p=1; print; next} /sp/{p=0}p' file2
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
과정은 매우 간단하며 설명이 거의 필요하지 않습니다.
답변4
사용행복하다(이전 Perl_6)
~$ raku -e 'my @query = "/path/to/fastaIDs.txt".IO.lines;
.grep(/@query/).print for lines.join("\n").split(/^^ <?before \> >/, :skip-empty);' file.fa
#OR:
~$ raku -e 'my @query = "/path/to/fastaIDs.txt".IO.lines;
.grep(/@query/).print for lines.join("\n").comb(/^^ \> <-[>]>+ /);' file.fa
#OR (more simply):
~$ raku -e 'my @query = "/path/to/fastaIDs.txt".IO.lines;
.print for lines.join("\n").comb(/^^ \> @query <-[>]>+ /);' file.fa
Raku는 Perl 계열의 프로그래밍 언어입니다. Raku는 매우 강력한 정규식/문법 엔진을 구현하므로 생물정보학 텍스트 처리에 적합한 선택입니다.
상단에서 각 코드 예제를 오른쪽에서 왼쪽으로 읽으면 (첫 번째 예제) 또는 (두 번째 예제)를 사용하여 fasta.fa
파일을 별도의 레코드로 나눌 수 있습니다. 파일의 행을 읽고 개행 문자로 연결하며 다음을 수행합니다.split
comb
fasta.fa
\n
split
줄의 오른쪽 모서리 앞에 있는 공백 요소를 제거하려면>
이 옵션을 사용하십시오 .:skip-empty
참고:<?before … >
Raku의 긍정적인 예측. 이러한 기록은grep
필수 FastaID를 기반으로 ped됩니다.
또는
comb
>
-through 는 오른쪽 모서리 로 시작하고 그 뒤에 오른쪽이 아닌 문자가 하나 이상 오는 요소를 찾습니다 . Note<-[…]>
는 Raku의 부정적인 문자 클래스(<+[…]>
그러나 . 이러한 레코드는grep
필수 FastaID에 연결됩니다. 세 번째 예에서는 연속된comb
단계가grep
단일comb
단계로 축소됩니다.
입력 예( fastaIDs.txt
):
sp|B7UM99|TIR_ECO27
sp|P06616|ERA_ECOLI
입력 예( file.fa
):
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
>sp|P0AD68|HUMAN
MKAAAKTQKPKRQEEHANFISWRFALLCGC
ILLALAFLLGRVAWLQVISPDMLVKEGDMR
SLRVQQVSTSRGMITDRSGRPLAVSVPVKA
IWADPKEVHDAGGISVGDRWKALANALNIP
............
예제 출력:
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLL
GQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
참고: 기본적으로 아래의 FASTA 레코드 구분 기호 코드로 시작하고 경로/grep 코드를 추가하여 관심 있는 레코드를 필터링합니다.
~$ raku -e '.print for lines.join("\n").split(/^^ <?before \> >/, :skip-empty);' file.fa
#OR:
~$ raku -e '.print for lines.join("\n").comb(/^^ \> <-[>]>+ /);' file.fa