2017-09-25 129 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中。

相關問題