Note that none of the solutions so far take into account what your original code seems to want to do, which is to only replace newlines before [ATCGN]; OTOH your solution doesn't take into account whether the lines start with > or not. Here is one way that does both, while processing the file line-by-line, thereby saving memory.
use warnings; use strict; my $prevline; while ( my $curline = <DATA> ) { next unless defined $prevline; if ( $prevline=~/^>/ && $curline=~/^[ATCGN]/ ) { $prevline =~ s/\n\z/\t/; } print $prevline; } continue { $prevline = $curline } print $prevline if defined $prevline; __DATA__ >1 AGTCGTAGCAT foo bar >2 TGAGCTACG >3 GGCATAGN quz >4 CGCACNCAGCTACACC >5 NGATAGCTACA
Output:
>1 AGTCGTAGCAT foo bar >2 TGAGCTACG >3 GGCATAGN quz >4 CGCACNCAGCTACACC >5 NGATAGCTACA
In reply to Re: change \n to \t
by haukex
in thread change \n to \t
by yueli711
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |