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
[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