Skip to content

Instantly share code, notes, and snippets.

@itsvenu
Forked from mkuhn/stockholm2fasta.pl
Last active September 24, 2020 13:54
Show Gist options
  • Save itsvenu/e0233043ba77c5ce48aa to your computer and use it in GitHub Desktop.
Save itsvenu/e0233043ba77c5ce48aa to your computer and use it in GitHub Desktop.
Script to convert Stockholm format sequence file to fasta format
#!/usr/bin/perl -w
my $columns = 60;
my $progname = $0;
$progname =~ s/^.*?([^\/]+)$/$1/;
my $usage = "Usage: $progname [<Stockholm file(s)>]\n";
$usage .= " [-h] print this help message\n";
$usage .= " [-g] write gapped FASTA output\n";
$usage .= " [-s] sort sequences by name\n";
$usage .= " [-c <cols>] number of columns for FASTA output (default is $columns)\n";
# parse cmd-line opts
my @argv;
while (@ARGV) {
my $arg = shift;
if ($arg eq "-h") {
die $usage;
} elsif ($arg eq "-g") {
$gapped = 1;
} elsif ($arg eq "-s"){
$sorted = 1;
} elsif ($arg eq "-c") {
defined ($columns = shift) or die $usage;
} else {
push @argv, $arg;
}
}
@ARGV = @argv;
my @seqorder = ();
my %seq;
while (<>) {
next unless /\S/;
next if /^\s*\#/;
if (/^\s*\/\//) { printseq() }
else {
chomp;
my ($name, $seq) = split;
push @seqorder, $name unless exists $seq{$name};
$seq{$name} .= $seq;
}
}
printseq();
sub printseq {
@seqorder = sort @seqorder if $sorted;
foreach $key (@seqorder) {
print ">$key\n";
for (my $i = 0; $i < length $seq{$key}; $i += $columns){
print substr($seq{$key}, $i, $columns), "\n";
}
}
%seq = ();
@seqorder = ();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment