Suppression de caractères et suppression de lignes vides avec SED / Perl

Je veux supprimer tous les ‘N’ des données qui ressemblent à ceci:

>Seq1 NNNNNNNNA NNNNNNNNN ATCGGGGGG NNNNNNNNN GTCGGGGGG >Seq2 GATAAAAAA NNNNNNNNN 

Alors qu’il retourne:

 >Seq1 AATCGGGGGGGTCGGGGGG >Seq2 GATAAAAAA 

Mais pourquoi cela ne le fait pas:

 sed -e 's/N//g' 

Quelle est la bonne façon d’aborder cela?

Voici ma solution Perl:

 perl -pe 'if (!/^>/) { tr/N\n//d } elsif ($. > 1) { $_ = "\n$_" }' input-file 

Utilisation:

 sed ':a;N;$!ba;s/[N\n]//g' 

[N \ n] correspond aux N ou aux nouvelles lignes. Le rest est tiré de cette question sur StackOverflow .

Cela pourrait fonctionner pour vous:

 sed '/>Seq/{:a;x;s/N//g;s/\n//2gp;g;x;d};H;$ba;d' file >Seq1 AATCGGGGGGGTCGGGGGG >Seq2 GATAAAAAA 

ou ca:

 sed ':a;$!{N;ba};s/[N\n]//g;s/>Seq[0-9]*/\n&\n/g;s/.//' file >Seq1 AATCGGGGGGGTCGGGGGG >Seq2 GATAAAAAA 

Simple awk devrait faire l’affaire –

awk '!/^N+/' filename

Tester:

 [jaypal:~/Temp] cat temp >Seq1 NNNNNNNNA NNNNNNNNN ATCGGGGGG NNNNNNNNN GTCGGGGGG >Seq2 GATAAAAAA NNNNNNNNN [jaypal:~/Temp] awk '!/^N+/' temp >Seq1 ATCGGGGGG GTCGGGGGG >Seq2 GATAAAAAA 

vous devez ‘\ n’ correspondre aux caractères de la nouvelle ligne:

 sed -e 's/[N\n]//g' 

si cela ne fait pas ce que vous voulez, s’il vous plaît, montrez-nous ce qu’il fait et expliquez ce qui est différent de ce que vous voulez