$ cat pm_1193237_input.fasta >qwerty|111|222|999 AAAAAAAAAA >asdfgh|333|444|888 CCCCCCCCCC >zxcvbn|555|666|777 GGGGGGGGGG >plokmi|777|888|666 TTTTTTTTTT >qwerty|111|222|555 AAAAAAAAAA >asdfgh|333|444|444 CCCCCCCCCC >zxcvbn|555|666|333 GGGGGGGGGG >plokmi|777|888|222 TTTTTTTTTT #### #!/usr/bin/env perl use strict; use warnings; use autodie; my $infile = 'pm_1193237_input.fasta'; { my $out_fh; open my $in_fh, '<', $infile; while (<$in_fh>) { my $pos = index $_, '|'; if ($pos == -1) { # Sequence print $out_fh $_; } else { # Header print { get_fh(\$out_fh, substr $_, 1, $pos - 1) } $_; } } close $in_fh; } close_out_fhs(); { my %fh_for; sub get_fh { my ($fh, $name) = @_; unless (exists $fh_for{$name}) { open $fh_for{$name}, '>', gen_fname($name); } $$fh = $fh_for{$name}; } sub close_out_fhs { close $_ for values %fh_for } } sub gen_fname { 'pm_1193237_output_' . $_[0] . '.fasta' } #### $ cat pm_1193237_output_qwerty.fasta >qwerty|111|222|999 AAAAAAAAAA >qwerty|111|222|555 AAAAAAAAAA $ cat pm_1193237_output_asdfgh.fasta >asdfgh|333|444|888 CCCCCCCCCC >asdfgh|333|444|444 CCCCCCCCCC $ cat pm_1193237_output_zxcvbn.fasta >zxcvbn|555|666|777 GGGGGGGGGG >zxcvbn|555|666|333 GGGGGGGGGG $ cat pm_1193237_output_plokmi.fasta >plokmi|777|888|666 TTTTTTTTTT >plokmi|777|888|222 TTTTTTTTTT