Perl – добавление строк подчеркивания и сортировки

Поскольку я биолог и новичок в perl, я хотел бы получить помощь эксперта perl

cat input.txt

##gff-version 2 ##source-version geneious 5.6.3 gi371443188gbJH5566721_extraction_reversed Geneious CDS 1043 1132 . + . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed Geneious CDS 2063 2260 . + . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed Geneious CDS 2336 2593 . + . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed Geneious CDS 3474 3633 . + . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed Geneious extracted region 1 13933 . + . Name=Extracted region from gi|371443188|gb|JH556672.1|;Extracted interval="2010140 <- 2024072" 

Мой выход.txt

 gi371443188gbJH5566721_extraction_reversed CDS 2023029 2022940 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed CDS 2022009 2021812 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed CDS 2021736 2021479 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi371443188gbJH5566721_extraction_reversed CDS 2020598 2020439 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 ### 

Мой ожидаемый выход

 gi_371443188_gb_JH5566721 gene 2020598 2023029 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.13412469767431 gi_371443188_gb_JH5566721 CDS 2020598 2020439 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi_371443188_gb_JH5566721 CDS 2021736 2021479 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi_371443188_gb_JH5566721 CDS 2022009 2021812 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 gi_371443188_gb_JH5566721 CDS 2023029 2022940 . - . Name=Xm ITGB3;created by=User;modified by=User;ID=Pa0FVoXpt/GgL1I/VO7LY0UlFAc.1341246976743.1 ### 

Я хотел бы помочь эксперту Perl в реформировании моего вывода в perl-коде, приведенном ниже.

1. Я хотел бы добавить под балл в массив [0] на выходе (т.е. gi371443188gbJH5566721_extraction_reversed как gi_371443188_gb_JH5566721)

2.sort строки CDS в порядке возрастания в зависимости от значений столбца 3 и 4 выхода (см. Ожидаемый результат)

3. Добавьте новую строку вверху файла в виде gi_371443188_gb_JH556672.1 гена с минимальным и максимальным значением строк CDS (см. Ожидаемый результат)

Мой код Perl приведен ниже.

 #usr/bin/perl; open(FH,"$ARGV[0]"); my %num=""; my %all=""; while(<FH>){ chomp $_; my @array=split("\t"); #print "$array[2]\n"; if($array[2] eq "extracted region"){ $array[8]=~/.*\w+=\"\d+ <- (\d+)"/gm; $num{$array[0]}="$1"; } if($array[2] eq "CDS"){ $all{$array[0]}.="$_\n"; } } foreach $i (keys %all){ my @line=split "\n",$all{$i}; for ($j=0;$j<=$#line;$j++){ my @new_line=split "\t",$line[$j]; my $pos1=$num{$i}-$new_line[3]; my $pos2=$num{$i}-$new_line[4]; #print $num{$i}; exit; $new_line[6] =~ s/\+/-/g; print "$new_line[0]\t$new_line[2]\t$pos1\t$pos2\t$new_line[5]\t$new_line[6]\t$new_line[7]\t$new_line[8]\n"; } } print "###\n"; в #usr/bin/perl; open(FH,"$ARGV[0]"); my %num=""; my %all=""; while(<FH>){ chomp $_; my @array=split("\t"); #print "$array[2]\n"; if($array[2] eq "extracted region"){ $array[8]=~/.*\w+=\"\d+ <- (\d+)"/gm; $num{$array[0]}="$1"; } if($array[2] eq "CDS"){ $all{$array[0]}.="$_\n"; } } foreach $i (keys %all){ my @line=split "\n",$all{$i}; for ($j=0;$j<=$#line;$j++){ my @new_line=split "\t",$line[$j]; my $pos1=$num{$i}-$new_line[3]; my $pos2=$num{$i}-$new_line[4]; #print $num{$i}; exit; $new_line[6] =~ s/\+/-/g; print "$new_line[0]\t$new_line[2]\t$pos1\t$pos2\t$new_line[5]\t$new_line[6]\t$new_line[7]\t$new_line[8]\n"; } } print "###\n"; 

One Solution collect form web for “Perl – добавление строк подчеркивания и сортировки”

Это сделает это (т. Е. Мой результат соответствует вашим), хотя он не совсем чист.

Регулярное выражение для добавления символов подчеркивания, вероятно, может быть объединено. Но для сортировки вам нужно вывести все ваши выходные строки в список, а затем отсортировать (это также можно сделать с входящей стороной, но вам все равно нужно все это в одном месте).

 --- test.pl~ 2012-07-13 12:04:36.000000000 -0700 +++ test.pl 2012-07-13 12:17:58.000000000 -0700 @@ -1,4 +1,4 @@ -#usr/bin/perl +#!/usr/bin/perl use strict; open(FH,"$ARGV[0]"); @@ -18,6 +18,7 @@ } my $i; + my @output; foreach $i (keys %all){ my @line=split "\n",$all{$i}; @@ -27,8 +28,15 @@ my $pos1=$num{$i}-$new_line[3]; my $pos2=$num{$i}-$new_line[4]; #print $num{$i}; exit; $new_line[6] =~ s/\+/-/g; - print "$new_line[0]\t$new_line[2]\t$pos1\t$pos2\t$new_line[5]\t$new_line[6]\t$new_line[7]\t$new_line[8]\n"; + $new_line[0] =~ s/gi/gi_/; + $new_line[0] =~ s/gb/_gb_/; + $new_line[0] =~ s/_extraction_reversed//; + push @output, "$new_line[0]\t$new_line[2]\t$pos1\t$pos2\t$new_line[5]\t$new_line[6]\t$new_line[7]\t$new_line[8]\n"; } } + @output = sort (@output); + foreach my $out (@output) { + print $out; + } print "###\n"; 
  • Поиск файлов с тем же именем, но с другим контентом?
  • Окрашивание хвостового выхода с помощью perl
  • Найти шаблон и удалить его из всех файлов
  • Заменить соответствующие круглые скобки с содержимым
  • Средние строки с одинаковым первым столбцом
  • Почему `rename` ведет себя по-разному, когда я использую полный путь вместо текущего пути?
  • Печать нескольких строк после n-го появления в bash
  • perl rename: предварительное присвоение набора имен файлов в подкаталогах
  • Выполнять команды Perl с определенного IP-адреса?
  • Получить последний набор непустых строк
  • Как вставить переменную в переменную в случайном месте?
  • Interesting Posts

    Невозможно отключить SSLv3 в Apache + mod_nss

    Предотвращение использования планировщиком определенных ядер на FreeBSD

    Исправлена ​​точка монтирования внешнего usb hdd

    Конфигурация iptables ssh через VPN

    Добавить строку после определенной строки в одной строке в текстовом файле

    Скопируйте файл с удаленного сервера в Windows home с помощью scp

    Где GCC-5 после установки на Solaris 11?

    Вызывать rsync со специфическими значениями по умолчанию для текущей папки?

    xorg.conf.d не загружается при запуске X во время стыковки

    Как подключить две машины через Wi-Fi и другое оборудование?

    Fedora 24: acpi = off -> Невозможно использовать графическую карту nvidia

    Как дать право писать / создавать права на еще не существующие файлы без доступа на запись родительского каталога?

    Как проверить, установлен ли HDF5?

    Проблема с Drbd – это по дизайну?

    ошибка установки драйвера Linux – "/lib/modules/2.6.18-194.el5/build: Нет такого файла или каталога. Стоп."

    Linux и Unix - лучшая ОС в мире.