탭으로 구분된 버전

탭으로 구분된 버전

아래와 같이 두 개의 큰 파일이 있습니다.

파일 1:

NW_006502347.1 316684
NW_006527876.1 351
NW_006502151.1 27628
NW_006526579.1 232
NW_006525259.1 132
NW_006501641.1 437014
NW_006525259.1 378
NW_006523082.1 215
NW_006522424.1 153
NW_006522101.1 815
NW_006521985.1 505
NW_006521985.1 527
NW_006521722.1 920
NW_006521525.1 73
NW_006521432.1 258
NW_006521302.1 938
NW_006521272.1 585
NW_006521272.1 745
NW_006521038.1 202
NW_006519846.1 1528
NW_006519837.1 10215

파일 2:

NW_006502347.1  Gnomon  CDS   305319  305340   .  +  0  ID=cds43608  Parent=rna48098  Dbxref=GeneID:102908761,Genbank:XP_006997436.2  Name=XP_006997436.2  gbkey=CDS  gene=LOC102908761  partial=true  product=histone deacetylase 4-like  protein_id=XP_006997436.2
NW_006501037.1  Gnomon  gene  6936    115174   .  -  .  ID=gene0                      Dbxref=GeneID:102922816  Name=Efl1  gbkey=Gene  gene=Efl1  gene_biotype=protein_coding  partial=true  start_range=.,6936
NW_006501037.1  Gnomon  mRNA  6936    115174   .  -  .  ID=rna0      Parent=gene0     Dbxref=GeneID:102922816,Genbank:XM_006970114.2  Name=XM_006970114.2  gbkey=mRNA  gene=Efl1  model_evidence=Supporting evidence includes similarity to: 5 mRNAs%2C 7 Proteins%2C and 99%25 coverage of the annotated genomic feature by RNAseq alignments%2C including 16 samples with support for all annotated introns  partial=true  product=elongation factor like GTPase 1  start_range=.,6936  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  115095  115174   .  -  .  ID=id1       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  114246  114355   .  -  .  ID=id2       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006502347.1  Gnomon  mRNA  272091  477077   .  +  .  ID=rna48098  Parent=gene26399 Dbxref=GeneID:102908761,Genbank:XM_006997374.2  Name=XM_006997374.2  end_range=477077,.  gbkey=mRNA  gene=LOC102908761  model_evidence=Supporting evidence includes similarity to: 1 mRNA%2C and 90%25 coverage of the annotated genomic feature by RNAseq alignments  partial=true  product=histone deacetylase 4-like  transcript_id=XM_006997374.2
NW_006501037.1  Gnomon  exon  92339   92472    .  -  .  ID=id5       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  90969   91106    .  -  .  ID=id6       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  89261   89475    .  -  .  ID=id7       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006502151.1  Gnomon  exon  26099   27657    .  -  .  ID=id586652  Parent=rna47002  Dbxref=GeneID:102918658,Genbank:XM_006996663.2  gbkey=mRNA  gene=Rftn1  product=raftlin%2C lipid raft linker 1  transcript_id=XM_006996663.2
NW_006501641.1  Gnomon  mRNA  393496  438556   .  +  .  ID=rna40001  Parent=gene21212 Dbxref=GeneID:102913870,Genbank:XM_015986269.1  Name=XM_015986269.1  gbkey=mRNA  gene=LOC102913870  model_evidence=Supporting evidence includes similarity to: 9 mRNAs%2C 5 Proteins%2C and 81%25 coverage of the annotated genomic feature by RNAseq alignments  product=transmembrane protein 189  transcript_id=XM_015986269.1
NW_006501053.1  Gnomon  exon  5104713 5104872  .  +  .  ID=id45206   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1
NW_006501053.1  Gnomon  exon  5104959 5105062  .  +  .  ID=id45207   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1
NW_006501053.1  Gnomon  exon  5105698 5105881  .  +  .  ID=id45208   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1
NW_006501053.1  Gnomon  exon  5106131 5106246  .  +  .  ID=id45209   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1

파일 1의 정보를 사용하여 열 13 또는 14에서 "gene=" 뒤에 오는 단어(예: "Efl1")를 추출하고 싶습니다. 보다 구체적으로 다음을 수행하고 싶습니다.

1 단계)파일 1의 열 1의 레이블(예: NW_006527876.1)을 파일 2의 열 1의 레이블과 비교하고 열 1(파일 2)이 파일 1의 열 1과 일치하는 모든 행을 추출합니다.

보시다시피 열 1(파일 2)의 레이블이 중복되므로 파일 1의 각 레이블에 대해 여러 개의 일치 항목이 있습니다.

파일 2의 열 4와 5는 간격을 나타내고, 열 4는 간격의 시작이고, 열 5는 간격의 끝입니다. 파일 1의 열 2는 이러한 간격 사이의 숫자를 나타냅니다.

2 단계) 1단계에서 분리된 행에서 열 2(파일 1) 아래의 번호가 파일 2의 열 4와 5에 표시된 간격 사이에 있는 행을 추출합니다.

이것은 내 이해를 넘어서는 것이지만 명령의 모양은 다음과 같습니다.

awk '{ print $1 }' file 1 |  
awk `$4 *(file2)* < $2 *(file1)*' | awk '$5 *(file2)* > $2 *(file1)*' > output.tsv

출력에는 열 1 아래에 고유 라벨이 있는 행이 포함되어야 합니다.

3단계)위에서 생성된 output.tsv 파일에서 열 13 또는 14(아래 참조) 아래의 "gene=" 등호 뒤의 단어를 추출하여 등호 뒤의 단어만 포함하는 파일을 만들고 싶습니다.

최종 출력 파일(이 예를 기반으로 함):

LOC102908761
Rftn1
LOC102913870

답변:

while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { if (gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) !~ /\s/) print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1); }' < file2.txt; done <file1.txt > gene_hits.txt

다음으로, 동일한 유전자에 대해 서로 다른 유전자좌 매핑을 유지하면서 중복(여러 간격의 동일한 유전자좌)을 제거하려면 다음을 수행하십시오.

perl -ne 'print if ++$k{$_}==1' A_gene_hits.txt > A_genes.txt

답변1

구분 기호로 공백이 있다고 가정합니다.

$ while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) }' <file2; done <file1
LOC102908761
Rftn1
LOC102913870

설명하다

  • while read -r id pos; do FOO; done <file1: 이것은 file1한 줄씩 읽고 첫 번째 필드(예: NW_006502347.1)를 쉘 변수에 넣고 $id두 번째 필드(예: 316684)를 쉘 변수에 넣습니다 $pos. 그런 다음 FOO각 행에 대해 실행됩니다.
  • awk -v id="$id" -v pos="$pos" 'BAR' <file2: 의 각 줄에 대해 실행할 명령을 file1실행합니다 . 그러면 일치하는 부품이 검색됩니다 . 우리는 이 스크립트에 셸에서 두 개의 "외부" 변수를 알려주어야 합니다 . 즉, awk 변수에는 쉘 변수와 동일한 값이 할당되고 , awk 변수 와 쉘 변수에도 동일한 값이 할당됩니다 .awkBARfile2awkid$idpos$pos
  • $1 == id && pos > $4 && pos < $5: 이것은 스크립트의 "조건부" 부분입니다 awk. 이러한 조건이 충족되면 다음 명령이 실행됩니다. 여기서는 첫 번째 필드가 $1현재 행과 동일하고 의 file2네 번째와 다섯 번째 필드 사이에 있는지 확인합니다.idfile1pos$4$5file2
  • { print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) }: 위의 조건이 충족되면 이 코드가 실행됩니다. 우리는 그것을 first 로 바꾸고 싶습니다 gensub. gene=영숫자 문자열 뒤에 임의의 길이가 오는 문자열을 검색합니다 ([A-Za-z0-9]*). 영숫자 문자열은 (괄호로 묶입니다. 또한 전체 문자열 앞과 뒤의 모든 문자를 )"검색"합니다 . 따라서 이것은 전체 줄을 "검색"하고 (첫 번째이자 유일한) 캡처 그룹 인 다음의 영숫자 문자열 로 바꿉니다 . 궁극적으로 첫 번째 항목을 바꾸는 것을 의미하지만 한 줄에 일치 항목이 하나만 있다고 가정하기 때문에 이는 의미가 없습니다 ..*gene=([A-Za-z0-9]*)"\\1"gene=1gene=

탭으로 구분된 버전

일반적으로 저는 탭으로 구분된 파일을 사용하는 것을 선호하며, 특히 GFF/GTF 파일이라고 가정할 경우 더욱 그렇습니다. 이를 통해 특히 필드 9에서 공백을 구별할 수 있습니다.

while IFS=$'\t' read -r id pos; do awk -F'\t' -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) }' <file2.tsv ; done <file1.tsv

스크립트 수정은 탭에서 쉘 라인 IFS=$'\t'awk라인을 명시적으로 분할하는 것입니다 -F'\t'.

관련 정보