У меня есть два файла, в которых я хочу просто выбрать подмножество файлов .gtf для идентификаторов, которые существуют в другом файле. Я использую функцию grep, но вывод пуст.
grep -F Transcript_names2.txt gencode.v30.annotation.gtf > selected_genes
Вот как выглядит файл .gtf:
##provider: GENCODE
##contact: [email protected]
##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"
Может ли кто-нибудь помочь мне с этим?
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
Я сделаю, но это займет много времени, чтобы закончить это для большого файла. Существуют ли многоядерные процессы для grep?
@ user2806363 см. xargs
выше
где его выход? Как тогда указать выходной файл?
@vintnes, как указать вывод? Не думаю, что мне нужно иметь fF?
@user2806363 добавьте > selected_genes
в конец. Второе решение использует xargs вместо -file для параллельного запуска выражений. Вы также можете попробовать -P$(wc -l Transcript_names2.txt)
запустить столько потоков, сколько у вас есть шаблонов, но на самом деле это может быть менее эффективно, чем всего несколько потоков.
@ user2806363: не могли бы вы принять ответ vintnes после stackoverflow.com/help/someone-answers?
vim Transcript_names2.txt
:set ff=unix
Это распространенная проблема, когда файл Windows импортируется в Linux.
Формат файла .txt
, который вы скопировали из Windows, в Linux — dos
, поэтому вам нужно изменить его на unix
.
Пожалуйста, добавьте желаемый результат для этого примера ввода в свой вопрос.