如何基于其他文件中的ID选择文件的子集?

时间:2019-05-19 20:44:21

标签: linux bash awk

我有两个文件,我只想为其他文件中存在的ID选择.gtf文件的子集。 我使用了grep函数,但是输出为空。

grep -F Transcript_names2.txt  gencode.v30.annotation.gtf > selected_genes

.gtf文件的外观如下:

##provider: GENCODE
##contact: gencode-help@ebi.ac.uk
##format: gtf
##date: 2019-03-28
chr1    HAVANA  gene    11869   14409   .   +   .   gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
chr1    HAVANA  transcript  11869   14409   .   +   .   gene_id "ENSG00000223972.5"; transcript_id "ENST00000456328.2"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; transcript_type "processed_transcript"; transcript_name "DDX11L1-202"; level 2; transcript_support_level "1"; tag "basic"; havana_gene "OTTHUMG00000000961.2"; havana_transcript "OTTHUMT00000362751.1";
chr1    HAVANA  exon    11869   12227   .   +   .   gene_id "ENSG00000223972.5"; transcript_id "ENST00000456328.2"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; transcript_type "processed_transcript"; transcript_name "DDX11L1-202"; exon_number 1; exon_id "ENSE00002234944.1"; level 2; transcript_support_level "1"; tag "basic"; havana_gene "OTTHUMG00000000961.2"; havana_transcript "OTTHUMT00000362751.1";
chr1    HAVANA  exon    12613   12721   .   +   .   gene_id "ENSG00000223972.5"; transcript_id "ENST00000456328.2"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; transcript_type "processed_transcript"; transcript_name "DDX11L1-202"; exon_number 2; exon_id "ENSE00003582793.1"; level 2; transcript_support_level "1"; tag "basic"; havana_gene "OTTHUMG00000000961.2"; havana_transcript "OTTHUMT00000362751.1";
chr1    HAVANA  exon    13221   14409   .   +   .   gene_id "ENSG00000223972.5"; transcript_id "ENST00000456329.2"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; transcript_type "processed_transcript"; transcript_name "DDX11L1-202"; exon_number 3; exon_id "ENSE00002312635.1"; level 2; transcript_support_level "1"; tag "basic"; havana_gene "OTTHUMG00000000961.2"; havana_transcript "OTTHUMT00000362751.1";

这是Transcript_names2.txt的样子:

"ENST00000456328.2"
"ENST00000456329.2"

有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

man grep是一本好书。

使用-F将表达式视为固定字符串。 (不是正则表达式)

使用-f来获取要读取模式的文件。

它们不是排他性的:

grep -Ff Transcript_names2.txt gencode.v30.annotation.gtf > selected_genes

新要求:速度。尝试使用不同的-P值;这是线程数。

xargs -I{} -P4 grep -F {} gencode.v30.annotation.gtf < Transcript_names2.txt

答案 1 :(得分:0)

vim Transcript_names2.txt :set ff=unix 将Windows文件导入Linux时,这是一个常见问题。 从Windows复制的.txt文件的格式在Linux中为dos,因此您需要将其更改为unix