Update:#!/usr/bin/perl use strict; use warnings; while (my $line = <DATA>) { process_record($line) if $line=~ /^>/; } sub process_record { my $line = shift; $line =~ s/\s*$//; #or chomp $line print "$line\t"; while (defined ($line=<DATA>) and $line !~ /^\s*$/) { $line =~ s/\s*$//; #or chomp $line print $line; } print "\n"; } =Prints: >sequence1 ACTCCCCGTGCGCGCCCGGCCCGTAGCGTCCTCGTCGCCGCCCCTCGTCTCGCAGC +CGCAGCCCGCGTGGACGCTCTCGCCTGAGCGCCGCGGACTAGCCCGGGTGGCC >sequence2 CAGTCCGGCAGCGCCGGGGTTAAGCGGCCCAAGTAAACGTAGCGCAGCGATCGGCG +CCGGAGATTCGCGAACCCGACACTCCGCGCCGCCCGCCGGCCAGGACCCGCGGCGCGATCGCGGCGCCG +CGCTACAGCCAGCCTCACTGGCGCGCGGGCGAGCGCACGGGCGCTC >sequence3 CACGACAGGCCCGCTGAGGCTTGTGCCAGACCTTGGAAACCTCAGGTATATACCTT +TCCAGACGCGGGATCTCCCCTCCCC >sequence4 CAGCAGACATCTGAATGAAGAAGAGGGTGCCAGCGGGTATGAGGAGTGCATTATCG +TTAATGGGAACTTCAGTGACCAGTCCTCAGACACGAAGGATGCTCCCTCACCCCCAGTCTTGGAGGCAA +TCTGCACAGAGCCAGTCTGCACACC =cut __DATA__ >sequence1 ACTCCCCGTGCGCGCCCGGCCCGTAGCGTCCTCGTCGCCGCCCCTCGTCTCGCAGCCGCAGCCCGCGTGG ACGCTCTCGCCTGAGCGCCGCGGACTAGCCCGGGTGGCC >sequence2 CAGTCCGGCAGCGCCGGGGTTAAGCGGCCCAAGTAAACGTAGCGCAGCGATCGGCGCCGGAGATTCGCGA ACCCGACACTCCGCGCCGCCCGCCGGCCAGGACCCGCGGCGCGATCGCGGCGCCGCGCTACAGCCAGCCT CACTGGCGCGCGGGCGAGCGCACGGGCGCTC >sequence3 CACGACAGGCCCGCTGAGGCTTGTGCCAGACCTTGGAAACCTCAGGTATATACCTTTCCAGACGCGGGAT CTCCCCTCCCC >sequence4 CAGCAGACATCTGAATGAAGAAGAGGGTGCCAGCGGGTATGAGGAGTGCATTATCGTTAATGGGAACTTC AGTGACCAGTCCTCAGACACGAAGGATGCTCCCTCACCCCCAGTCTTGGAGGCAATCTGCACAGAGCCAG TCTGCACACC
In general, use a regex when you know what you want to extract. Use a split when you know what you want to throw away. With the above regex, it is not necessary to enumerate all of these potential non-word things like "|;(space)", etc. However, note that underscore "_" is a "word character" (any character valid in a Perl variable name is allowed for \w). If underscore could directly follow the sequence id, then of course the regex would need to change. However, I see no evidence that would be necessary.(my $id) = $line =~ /^(>\w+)/; #allow for kruft after id print "$id\t";
In reply to Re: Converting fasta (with multiple sequences) into tabular using perl
by Marshall
in thread Converting fasta (with multiple sequences) into tabular using perl
by rarenas
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |