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

Я отметил 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/; } 
  • Разбор скобок с помощью sed с использованием регулярного выражения
  • Разделить один файл на несколько файлов на основе шаблона (разрез может возникать в строках)
  • Существует ли Perl-эквивалент re.findall / re.finditer Python (результаты итеративного регулярного выражения)?
  • Есть ли библиотека Perl или Python для метаданных ID3?
  • как получить уникальные значения из списка повторяющихся значений
  • Почему невозможно создать практический Perl-конвертер исходного кода Python?
  • поиск отсутствующих значений в диапазоне с использованием любого языка сценариев - perl, python или shell script
  • Изменение размера изображений в каталоге
  • Презентации по переходу с Perl на Python
  • Может ли perl делать умножение строки как python?
  • Что такое Perl-версия итератора Python?
  •  
    Interesting Posts for Van-Lav

    Область блока в Python

    Как объединить данные столбца с одним и тем же значением и суммировать его конкретные данные

    Доступ к значению в кортеже, который находится в списке

    Tensorflow: как обменивать переменные между областями и задавать переменные в области видимости из другого

    Как запустить подпроцесс pdftk во время wsgi?

    Как получить земно-инерционные или земно-ориентированные координаты объектов из PyEphem?

    Pandas DataFrame: заменить все значения в столбце, основываясь на условии

    Объяснить Python .join ()

    Вставить элемент в список Python после каждого n-го элемента

    Сопоставление списка с деревом Хаффмана при сохранении относительного порядка

    Изменить текст метки легенды основного сюжета

    Сохранение фигуры после вызова pyplot.show () приводит к пустому файлу

    Результат -1% 7 отличается в javascript (-1) и python (6)

    pandas dataframe view vs copy, как мне сказать?

    Отсутствуют значения веб-страницы при очистке данных с помощью BeautifulSoup python 3.6

    Python - лучший язык программирования в мире.