2017-09-25 94 views
0

我有一个制表符分隔的文件(让我们称之为文件1),看起来像这样:合并制表符分隔文件

NC_027300.1 Gnomon exon 5501 5691 . - . gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon exon 16966 17019 . - . gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon exon 23978 24241 . - . gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon exon 43486 43714 . - . gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon exon 61647 62139 . - . gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon CDS 5501 5691 . - 2 gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon CDS 16966 17019 . - 2 gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon CDS 23978 24241 . - 2 gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon CDS 43486 43633 . - 0 gene_id "1"; transcript_id "1.1"; 
NC_027300.1 Gnomon exon 160437 160638 . - . gene_id "2"; transcript_id "2.1"; 
NC_027300.1 Gnomon exon 160913 161019 . - . gene_id "2"; transcript_id "2.1"; 

和更大的制表符delim文件(文件2),看起来像这样:

NC_027300.1 Gnomon gene 5501 62139 . - . ID=gene0;Dbxref=GeneID:106560212;Name=LOC106560212;gbkey=Gene;gene=LOC106560212;gene_biotype=protein_coding 
NC_027300.1 Gnomon mRNA 5501 62139 . - . ID=rna0;Parent=gene0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;Name=XM_014160784.1;gbkey=mRNA;gene=LOC106560212;model_evidence=Supporting evidence includes similarity to: 99%25 coverage of the annotated genomic feature by RNAseq alignments%2C including 8 samples with support for all annotated introns;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 
NC_027300.1 Gnomon exon 61647 62139 . - . ID=id1;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;gbkey=mRNA;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 
NC_027300.1 Gnomon exon 43486 43714 . - . ID=id2;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;gbkey=mRNA;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 
NC_027300.1 Gnomon exon 23978 24241 . - . ID=id3;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;gbkey=mRNA;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 
NC_027300.1 Gnomon exon 16966 17019 . - . ID=id4;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;gbkey=mRNA;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 
NC_027300.1 Gnomon exon 5501 5691 . - . ID=id5;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;gbkey=mRNA;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 
NC_027300.1 Gnomon CDS 43486 43633 . - 0 ID=cds0;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XP_014016259.1;Name=XP_014016259.1;gbkey=CDS;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;protein_id=XP_014016259.1 
NC_027300.1 Gnomon CDS 23978 24241 . - 2 ID=cds0;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XP_014016259.1;Name=XP_014016259.1;gbkey=CDS;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;protein_id=XP_014016259.1 
NC_027300.1 Gnomon CDS 16966 17019 . - 2 ID=cds0;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XP_014016259.1;Name=XP_014016259.1;gbkey=CDS;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;protein_id=XP_014016259.1 

我想创建一个新的文件,该文件只包含来自文件1的是也存在于文件2,基于前8列线,有从file1和file2中的9列的所有9列作为第10列。像这样:

NC_027300.1 Gnomon exon 5501 5691 . - . gene_id "1"; transcript_id "1.1"; ID=id5;Parent=rna0;Dbxref=GeneID:106560212,Genbank:XM_014160784.1;gbkey=mRNA;gene=LOC106560212;product=fibroblast growth factor receptor 3-like;transcript_id=XM_014160784.1 

我一直在努力遵循this example这是(我的认识非常有限),我想出了:

awk 'NR==FNR{a[$1,$2,$3,$4,$5,$6,$7,$8]=$10;next} ($1,$2,$3,$4,$5,$6,$7,$8) in a{print $0, a[$$1,$2,$3,$4,$5,$6,$7,$8]}' file1 file2 > newfile 

可能有人请告诉我,如果我是附近的任何地方,并帮助,如果这是错的?我的文件是1M +行,目前正在运行,但是我担心可能需要一段时间才能看到它是否正常工作!在此先感谢

回答

1

切换输入文件顺序和整理:

awk ' 
BEGIN { FS=OFS="\t" } 
{ k = $1 FS $2 FS $3 FS $4 FS $5 FS $6 FS $7 FS $8 } 
NR==FNR { a[k]=$9; next } 
k in a { print $0, a[k] } 
' file2 file1 
+0

这完全适用于更小的文件,但试图在大文件使用(> 700MB,> 100万行),当我得到这个一段时间后:分段故障(核心倾倒)。 是否有替代awk可以更好地处理它?一个Perl脚本替代也许? –

+0

显然这是因为你试图将大量文​​件读入内存而发生的。如果你在perl或者ruby或者其他工具中实现了这个方法,你会遇到同样的问题,如果你采用了不同的方法,它就像awk中的perl,ruby等一样工作。文本。自从你发布这个问题已经有4个月了,现在没有人会重新考虑它,试图提出一种不同的方法,所以我建议你接受这个答案,因为它修复了你的脚本,然后发布一个新的问题与相关有关segv的信息。 –

1

你是正确的道路上,看上去需要小的修正

变化

a[$$1,$2,$3,$4,$5,$6,$7,$8] 
^
Here 

a[$1,$2,$3,$4,$5,$6,$7,$8] 

,使其从文件1这是打印第10场在数组a中,如果由文件2的8个字段组成的索引关键字存在于使用file1的前8个字段创建的数组a中。

相关问题