#!/usr/bin/env perl -l use strict; use warnings; use autodie; my ($min, $max) = (10, 15); my $re = qr{(?x: ^ > ( .+ ) $ )}; my (%seq, $id); { open my $fh, '<', 'pm_1190090.fa'; while (<$fh>) { if (/$re/) { $id = $1; } else { next if exists $seq{$id} and $seq{$id} eq ''; chomp; $seq{$id} .= $_; $seq{$id} = '' if length $seq{$id} > $max; } } } delete @seq{grep { length $seq{$_} < $min } keys %seq}; print "$_: $seq{$_}" for sort keys %seq; #### >1 AAA >5 AAA >2 AAA >1 AAACCC >5 CCC >3 AAA >1 AAACCCGGG >3 CCCGGG >1 AAACCCGGGTTT >4 AAACCCGGGTTT >3 TTT >6 12345678901234 >7 123456789012345 >8 1234567890123456 #### $ pm_1190090_fasta_filter_length.pl 3: AAACCCGGGTTT 4: AAACCCGGGTTT 6: 12345678901234 7: 123456789012345 $ #### >9 123456789 >10 1234567890 >11 12345678901 #### 10: 1234567890 11: 12345678901