나는 gff 파일의 첫 번째 파일에 있는 유전자 목록을 파악하기 위해 이 명령을 사용하고 있습니다.
grep -w -f upregulated_genes_in_BEg GCA_900659725.1_ASM90065972v1_genomic.gff
나에게는 효과가 없습니다. 제안 사항을 알려주십시오.
첫 번째 파일의 유전자 목록..
LOCUS10095
LOCUS10108
LOCUS10129
LOCUS10130
LOCUS10152
LOCUS10161
LOCUS10225
LOCUS10252
LOCUS10266
LOCUS10268
LOCUS10294
LOCUS10313
LOCUS10351
LOCUS10355
LOCUS10358
답변1
-w
플래그를 건너뛰면 grep
검색이 단어 경계에서 일치하는 것으로 제한됩니다.~로써 정의 된grep
(문서에서"전체 단어를 구성하는 일치 항목이 포함된 줄만 선택하세요."). 이 명령은 예상되는 출력을 생성합니다.
cat > GCA_900659725.1_ASM90065972v1_genomic.gff <<EOF
CAACVG010000001.1 EMBL region 1 15202 . + . ID=CAACVG010000001.1:1..15202;Dbxref=taxon:64391;gbkey=Src;mol_type=genomic DNA;note=contig: 10000|quiver
CAACVG010000001.1 EMBL gene 4526 9821 . - . ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1
EOF
cat > upregulated_genes_in_BEg <<EOF
LOCUS1
LOCUS10095
EOF
grep -f upregulated_genes_in_BEg GCA_900659725.1_ASM90065972v1_genomic.gff
인쇄:
CAACVG010000001.1 EMBL gene 4526 9821 . - . ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1
단어 경계에 대한 정확한 제어가 필요한 경우 아마도 다음 Perl 한 줄짜리가 더 나은 선택일 것입니다.
perl -lne 'BEGIN { @upregulated_genes_in_BEg = `cat upregulated_genes_in_BEg`; %is_upregulated_gene_in_BEg = map { $s = $_; chomp $s; ( $s => 1 ) } @upregulated_genes_in_BEg; } ( $gene ) = m{(LOCUS\w+)}; print if $is_upregulated_gene_in_BEg{ $gene }; ' GCA_900659725.1_ASM90065972v1_genomic.gff
한 줄의 코드가 상향 조절된 유전자를 포함하는 파일의 내용을 해시 값으로 읽습니다. 그런 다음 해당 해시를 사용하여 해당 해시 LOCUS...
에 현재 줄에 해당 단어가 포함되어 있는지 확인합니다 . 해시에 단어가 포함되어 있으면 해당 줄을 인쇄하세요.
Perl 단일 라이너는 다음 명령줄 플래그를 사용합니다.
-e
: Perl에게 파일이 아닌 인라인 코드를 찾도록 지시합니다.
-n
: 한 번에 한 줄씩 입력을 반복하며 $_
기본적으로 할당됩니다. : 코드 인라인을 실행하기 전에 입력 줄 구분 기호(*NIX의 기본값)를 제거
-l
하고 인쇄할 때 추가합니다."\n"
또한보십시오:
perldoc perlrun
: Perl 인터프리터 실행 방법: 명령줄 스위치
perldoc perlre
:Perl 정규 표현식(정규 표현식)
perldoc perlre
: Perl 정규 표현식(regexes): 수량자, 문자 클래스 및 기타 특수 이스케이프 그룹;
perldoc perlrequick
: Perl 정규 표현식으로 빠른 시작