using awk removing newline and specific position

Hello Friends,
Input File looks as follows:

>FASTA Header1
line1
line2
line3
linen
>FASTA Header2
Line1
Line2
linen
>FASTA Header3
and so on
.......

Output:
Want something as:

>FASTA Header1 
line1line2line3linen
>FASTA Header2 
line1line2line3
>FASTA Header3
and so no.......

My one line:

awk '{if($0~/^>/){print;next}else{printf("%s",$0)}}' TEXT File

This does:

>FASTA Header1 
line1line2line3linen>FASTA Header2 line1line2line3

Which I do not want.
So how can I add a "\n" before ">" and after "my lines"

how can read the next line and check if ">" occurs if so need to add "\n" to the end of current line.

Will awk be faster or PERL is the way to go as the file is huge. Thousands of line and more.
One of the programs in perl using arrays went out of memory :(,
so need to read and print line by line rather than buffer first.

Thanks

Here's a Perl solution -

$ 
$ cat -n f8
     1  >FASTA Header1
     2  line1
     3  line2
     4  line3
     5  linen
     6  >FASTA Header2
     7  Line1
     8  Line2
     9  linen
    10  >FASTA Header3
    11  Line1
    12  Line2
    13  linen
$ 
$ perl -lne 'if (/^>/){print "\n",$_} else {printf} END{print}' f8

>FASTA Header1
line1line2line3linen
>FASTA Header2
Line1Line2linen
>FASTA Header3
Line1Line2linen
$ 

There are no arrays involved here. I tested it on a dummy file that has 250,000 "FASTA Headers" and 4 lines under each FASTA header. So that's 1,250,000 lines in all.

$ 
$ head f88
>FASTA Header1
line1
line2
line3
line4
>FASTA Header2
line1
line2
line3
line4
$ 
$ tail f88
>FASTA Header249999
line1
line2
line3
line4
>FASTA Header250000
line1
line2
line3
line4
$ 
$ wc f88
 1250000  1500000 10888895 f88
$ 
$ 

The Perl script, when run on this file, and redirected to another file, takes roughly 5 seconds on my system.

$ 
$ 
$ time perl -lne 'if (/^>/){print "\n",$_} else {printf} END{print}' f88 >f89

real    0m5.454s
user    0m3.456s
sys     0m0.179s
$ 
$ 

HTH,
tyler_durden

awk '{if($0~/^>/){print"\n"$0;next}else{printf("%s",$0)}}' 

See the following command.

cat Input_data | tr "\n" " " | sed 's/[>]FASTA Header[0-9]*/\n&\n/g'

bash ?

while read L
do
     [ "${L:0:1}" = ">" ] && L="\n$L\n"
     echo -en "$L"
done < infile

Thanks a lot guys.
I just did a slight modification to the awk code:

awk '{if (NR==1 && $0 ~/>/){print$0;next}if($0~/^>/){print"\n"$0;next}else{printf("%s",$0)}}'

As I was getting a extra newline at the first read of header. Of course I use 'tail' to get rid of it. But than again, wanted to get it right with Awk. Perl, Sed and bash codes are good too (just need to modify a bit). Thanks again for all the input and quick answers.