制表符分隔版本

制表符分隔版本

我有两个大文件,如下所示:

文件一:

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逐行读取,并将第一个字段 (eg NW_006502347.1) 放入 shell 变量 中$id,将第二个字段 (eg 316684) 放入 shell 变量 中$pos。然后它FOO针对每一行运行。
  • awk -v id="$id" -v pos="$pos" 'BAR' <file2:对于 的每一行file1,我们将运行一个awk将运行的命令BAR。这将搜索file2匹配的零件。我们需要告诉这个awk脚本来自 shell 的两个“外部”变量。即 awk 变量id被赋予与 shell 变量相同的值$id,并且 awk 变量pos和 shell 变量也被赋予相同的值$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=。最终意味着替换第一次出现,尽管这没有多大意义,因为我假设每行1只有一个匹配。gene=

制表符分隔版本

一般来说,我更喜欢使用制表符分隔的文件,特别是对于我假设的 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

对脚本的修改是显式地拆分带有 的选项卡上的 shell 行IFS=$'\t'awk带有 的行-F'\t'

相关内容