Извлечение определенных данных из файла и запись его в другой файл

Я отметил python и perl в этом только потому, что это то, что я использовал до сих пор. Если кто-то знает лучший способ сделать это, я бы, конечно, захотел попробовать его. Во всяком случае, моя проблема:

Мне нужно создать входной файл для программы прогнозирования генов, который следует за следующим форматом:

seq1 5 15 seq1 20 34 seq2 50 48 seq2 45 36 seq3 17 20 

Где seq # – это генный идентификатор, а числа справа – позиции экзонов в открытой рамке считывания. Теперь у меня есть эта информация в файле .gff3, который содержит много другой информации. Я могу открыть это с помощью excel и легко удалить столбцы с не относящимися к делу данными. Вот как это устроено сейчас:

 PITG_00002 . gene 2 397 . + . ID=g.1;Name=ORF% PITG_00002 . mRNA 2 397 . + . ID=m.1; **PITG_00002** . exon **2 397** . + . ID=m.1.exon1; PITG_00002 . CDS 2 397 . + . ID=cds.m.1; PITG_00004 . gene 1 1275 . + . ID=g.3;Name=ORF%20g PITG_00004 . mRNA 1 1275 . + . ID=m.3; **PITG_00004** . exon **1 1275** . + . ID=m.3.exon1;P PITG_00004 . CDS 1 1275 . + . ID=cds.m.3;P PITG_00004 . gene 1397 1969 . + . ID=g.4;Name= PITG_00004 . mRNA 1397 1969 . + . ID=m.4; **PITG_00004** . exon **1397 1969** . + . ID=m.4.exon1; PITG_00004 . CDS 1397 1969 . + . ID=cds.m.4; 

Поэтому мне нужны только данные, выделенные жирным шрифтом. Например,

 PITG_0002 2 397 PITG_00004 1 1275 PITG_00004 1397 1969 

Любая помощь, которую вы могли бы дать, была бы весьма признательна, спасибо!

Edit: Ну, я испортил форматирование. Все, что находится между **, – это то, что мне нужно.

4 Solutions collect form web for “Извлечение определенных данных из файла и запись его в другой файл”

Похоже, ваши данные разделены табуляцией.

Эта программа Perl будет печатать столбцы 1, 4 и 5 из всех записей, имеющих exon в третьем столбце. Вам нужно изменить имя файла в инструкции open для вашего фактического имени файла.

 use strict; use warnings; open my $fh, '<', 'genes.gff3' or die $!; while (<$fh>) { chomp; my @fields = split /\t/; next unless @fields >= 5 and $fields[2] eq 'exon'; print join("\t", @fields[0,3,4]), "\n"; } 

вывод

 PITG_00002 2 397 PITG_00004 1 1275 PITG_00004 1397 1969 

В Unix:

 grep <file.gff3 " exon " | sed "s/^\([^ ]+\) +[.] +exon +\([0-9]+\) \([0-9]+\).*$/\1 \2 \3/" 

Для пешеходов:

(это Python)

 with open(data_file) as f: for line in f: tokens = line.split() if len(tokens) > 3 and tokens[2] == 'exon': print tokens[0], tokens[3], tokens[4] 

который печатает

 PITG_00002 2 397 PITG_00004 1 1275 PITG_00004 1397 1969 

Вот сценарий Perl-скрипта perl scriptName.pl file.gff3 :

 use strict; use warnings; while (<>) { print "@{ [ (split)[ 0, 3, 4 ] ] }\n" if /exon/; } 

Вывод:

 PITG_00002 2 397 PITG_00004 1 1275 PITG_00004 1397 1969 

Или вы можете просто сделать следующее:

 perl -n -e 'print "@{ [ (split)[ 0, 3, 4 ] ] }\n" if /exon/' file.gff3 

Чтобы сохранить данные в файле:

 use strict; use warnings; open my $inFH, '<', 'file.gff3' or die $!; open my $outFH, '>>', 'data.txt' or die $!; while (<$inFH>) { print $outFH "@{ [ (split)[ 0, 3, 4 ] ] }\n" if /exon/; } 
  • Как я могу считать уникальные термины в незашифрованном файле с открытым текстом?
  • Идентификация общих элементов в нескольких файлах
  • Как прочитать файл midi, изменить его инструмент и записать его обратно?
  • Используя Perl, Python или Ruby, как написать программу для «щелчка» на экране в запланированное время?
  • Заполнение нескольких символов пробелом - python
  • Как реализуются базовые типы данных (строки и целые числа) в Python и Perl
  • Есть ли способ программно прочитать файл с диска TrueCrypt в память?
  • Эмуляция функций типа lex в Perl или Python
  • Python - лучший язык программирования в мире.