in reply to Can you make this code shorter and/or quicker as well?

This is shorter and I'd be surprised if it's not also faster. I've cut down the data for demo purposes.

Input file:

$ cat pm_1076056_in.fasta >gi|321257144|ref|XP_003193485.1| flap ... MGIKGLTG RTIRMVDH ECK >gi|321473340|gb|EFX84308.1| hypothetical ... MGIKGLTQ TIRMVDNG CKQ

Script:

$ cat oneline.pl use strict; use warnings; while (<>) { /^>/ ? ($. > 1 && print "\n") : chomp; print; } print "\n";

Sample run:

$ perl oneline.pl pm_1076056_in.fasta > pm_1076056_out.fasta

Output file:

$ cat pm_1076056_out.fasta >gi|321257144|ref|XP_003193485.1| flap ... MGIKGLTGRTIRMVDHECK >gi|321473340|gb|EFX84308.1| hypothetical ... MGIKGLTQTIRMVDNGCKQ

-- Ken

Replies are listed 'Best First'.
Re^2: Can you make this code shorter and/or quicker as well?
by hazylife (Monk) on Feb 25, 2014 at 10:00 UTC
    Excellent solution! But it still needs a tr/\r//d in there somewhere :)
      "Excellent solution!"

      Thankyou.

      "But it still needs a tr/\r//d in there somewhere :)"

      I'm not sure that it does. If the input file was created on an MSWin system and then subsequently processed on a *nix system, then some additional handling of line-endings may be appropriate.

      The four instances of "s/[\r]//g" suggest multiple embedded carriage-returns; although, that might just be poorly coded. The single chomp doesn't add a lot of clarity either.

      If the OP can show where carriage-returns are embedded, I can certainly add a transliteration like you suggest.

      -- Ken