#!/usr/bin/env perl use strict; use warnings; my $columns = 50; my $gapped = 0; my $sorted = 0; my $progname = $0; $progname =~ s/^.*?([^\/]+)$/$1/; my $usage = "Usage: $progname []\n"; $usage .= " [-h] print this help message\n"; $usage .= " [-g] write gapped FASTA output\n"; $usage .= " [-s] sort sequences by name\n"; $usage .= " [-c ] 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 %seq; while (<>) { next unless /\S/; next if /^\s*\#/; if (/^\s*\/\//) { printseq() } else { chomp; my ( $name, $seq ) = split; $seq =~ s/[\.\-]//g unless $gapped; $seq{$name} .= $seq; } } printseq(); sub printseq { if ($sorted) { foreach my $key ( sort keys %seq ) { print ">$key\n"; for ( my $i = 0 ; $i < length $seq{$key} ; $i += $columns ) { print substr( $seq{$key}, $i, $columns ), "\n"; } } } else { while ( my ( $name, $seq ) = each %seq ) { print ">$name\n"; for ( my $i = 0 ; $i < length $seq ; $i += $columns ) { print substr( $seq, $i, $columns ), "\n"; } } } %seq = (); } =pod This is slightly modified from the original (https://github.com/ihh/dart/blob/master/perl/stockholm2fasta.pl) by Ian Holmes This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut