Изоляция части текстового файла с помощью grep - PullRequest
0 голосов
/ 01 июня 2018

У меня большой файл, как в этом маленьком примере:

chr1    HAVANA  transcript  69091   70008   .   +   .   gene_id "ENSG00000186092.4"; transcript_id "ENST00000335137.3"; gene_type "protein_coding"; gene_status "KNOWN"; gene_name "OR4F5"; transcript_type "protein_coding"; transcript_status "KNOWN"; transcript_name "OR4F5-001"; level 2; tag "basic"; tag "appris_principal"; tag "CCDS"; ccdsid "CCDS30547.1"; havana_gene "OTTHUMG00000001094.1"; havana_transcript "OTTHUMT00000003223.1";
chr1    HAVANA  exon    69091   70008   .   +   .   gene_id "ENSG00000186092.4"; transcript_id "ENST00000335137.3"; gene_type "protein_coding"; gene_status "KNOWN"; gene_name "OR4F5"; transcript_type "protein_coding"; transcript_status "KNOWN"; transcript_name "OR4F5-001"; exon_number 1;  exon_id "ENSE00002319515.1";  level 2; tag "basic"; tag "appris_principal"; tag "CCDS"; ccdsid "CCDS30547.1"; havana_gene "OTTHUMG00000001094.1"; havana_transcript "OTTHUMT00000003223.1";
chr1    HAVANA  CDS 69091   70005   .   +   0   gene_id "ENSG00000186092.4"; transcript_id "ENST00000335137.3"; gene_type "protein_coding"; gene_status "KNOWN"; gene_name "OR4F5"; transcript_type "protein_coding"; transcript_status "KNOWN"; transcript_name "OR4F5-001"; exon_number 1;  exon_id "ENSE00002319515.1";  level 2; tag "basic"; tag "appris_principal"; tag "CCDS"; ccdsid "CCDS30547.1"; havana_gene "OTTHUMG00000001094.1"; havana_transcript "OTTHUMT00000003223.1";

Каждая строка начинается с "chr".Я хочу сделать новый файл, в котором 3-й столбец "CDS".Как я могу сделать условный и grep?Я использовал следующий код:

grep -i CDS infile.txt > outfile

, но этот возвращает любую строку с CDS независимо от номера столбца.Вы знаете, как это исправить?

Я хочу получить это из небольшого примера:

chr1    HAVANA  CDS 69091   70005   .   +   0   gene_id "ENSG00000186092.4"; transcript_id "ENST00000335137.3"; gene_type "protein_coding"; gene_status "KNOWN"; gene_name "OR4F5"; transcript_type "protein_coding"; transcript_status "KNOWN"; transcript_name "OR4F5-001"; exon_number 1;  exon_id "ENSE00002319515.1";  level 2; tag "basic"; tag "appris_principal"; tag "CCDS"; ccdsid "CCDS30547.1"; havana_gene "OTTHUMG00000001094.1"; havana_transcript "OTTHUMT00000003223.1";

1 Ответ

0 голосов
/ 01 июня 2018

Чистое решение заключается в явной проверке третьего столбца с помощью awk:

awk '$3 == "CDS"' infile.txt

Для вашего ограниченного примера, похоже, что все совпадения CDS в других строках являются частью более длинного слова,так что

grep -w 'CDS' infile.txt

также будет работать, требуя, чтобы совпадение было точным словом, но это только на основе показанного вами ограниченного примера.

Решение grep, которое проверяет третий столбец, можетвыглядеть следующим образом (требуется GNU grep для \s, \S и \>):

grep -E '^(\S+\s+){2}CDS\>' infile.txt

или POSIX-совместимый:

grep -E '^([^[:blank:]]+[[:blank:]]+){2}CDS([[:blank:]]|$)' infile.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...