Обновлено 02.03.2009 Автор: Administrator
Простейший конвертер на Perl.
Часто при работе возникает следующая задача: последовательности хранятся в tab-delimited файле, при этом может быть несколько колонок с дополнительной информацией. Вместо этого последовательности нужно сохранить в обычный формат FASTA, например, чтобы передать в программу выравнивания. Иногда требуется сделать обратное преобразование.
Ниже приведен простейший Perl-скрипт, который преобразует tab-delimited файл в FASTA и обратно. При конвертировании tab->faa нужно указать индексы колонок (начинаются c 1), при конвертировании faa->tab ничего указывать не нужно.
#convert FASTA to TAB files and vice versa
use Getopt::Long;
use Bio::SeqIO;
sub help {
print " convert FASTA to TAB files and vice versa\n";
print " Usage:\n";
print " -f FASTA file name\n";
print " -a fasta -> tab mode\n";
print " -t tab -> fasta mode\n";
print " -ic index of ID column (1-based)\n";
print " -sc index of sequence column (1-based)\n";
}
#--------------------- main part --------------------------------
# GLOBAL VARIABLES
$FNAME=undef; # file to convert
$FAA2TAB=undef;
$TAB2FAA=undef;
$ID_COL=undef; # 1-based index of identifier in table
$SEQ_COL=undef; # index of column with sequence
GetOptions ('f=s' => \$FNAME,
'a' => \$FAA2TAB,
'ic=i' => \$ID_COL,
'sc=i' => \$SEQ_COL,
't' => \$TAB2FAA,
'help|?|h' => \$help );
if($help) { help(); exit;}
if(!($FNAME)) { die "please specify -f FNAME"; }
if((!($FAA2TAB))&&(!($TAB2FAA))) { die "please specify regime: tab2faa(-t) or faa2tab(-a)"; }
$ID_COL=$ID_COL-1;
$SEQ_COL=$SEQ_COL-1;
if ($TAB2FAA) {
if($ID_COL<0) { die "please specify -ic ID_COL (1-based)"; }
if($SEQ_COL<0) { die "please specify -sc SEQ_COL (1-based)"; }
open (INFILE, $FNAME) or print("Error opening file");
while () {
$str=$_; chomp($str);
my @line=split(/\t/,$str);
print '>'.$line[$ID_COL]."\n";
print $line[$SEQ_COL]."\n";
}
close(INFILE);
}
if ($FAA2TAB) {
my $FastaFile = Bio::SeqIO->new( -file => $FNAME, -format => 'fasta');
while (my $faaseq = $FastaFile->next_seq) {
my $seq=uc($faaseq->seq); #uppercase
print $faaseq->primary_seq->display_id."\t".$seq."\n";
}
}
< Предыдущая | Следующая > |
---|