Я хочу удалить все 'N' из данных, которые выглядят следующим образом:
>Seq1 NNNNNNNNA NNNNNNNNN ATCGGGGGG NNNNNNNNN GTCGGGGGG >Seq2 GATAAAAAA NNNNNNNNN
Так что он возвращает:
>Seq1 AATCGGGGGGGTCGGGGGG >Seq2 GATAAAAAA
Но почему это не так:
sed -e 's/N//g'
Как правильно подойти к этому?
Вот мое решение Perl:
perl -pe 'if (!/^>/) { tr/N\n//d } elsif ($. > 1) { $_ = "\n$_" }' input-file
Простой awk должен сделать трюк -
awk
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
Это может работать для вас:
sed '/>Seq/{:a;x;s/N//g;s/\n//2gp;g;x;d};H;$ba;d' file >Seq1 AATCGGGGGGGTCGGGGGG >Seq2 GATAAAAAA
или это:
sed ':a;$!{N;ba};s/[N\n]//g;s/>Seq[0-9]*/\n&\n/g;s/.//' file >Seq1 AATCGGGGGGGTCGGGGGG >Seq2 GATAAAAAA
Использование:
sed ':a;N;$!ba;s/[N\n]//g'
[N \ n] соответствует либо Ns, либо новым строкам.Остальное взято из этого вопроса на StackOverflow .
вам нужно '\ n', чтобы соответствовать символам новой строки:
sed -e 's/[N\n]//g'
, если это не дает того, что вы хотите, пожалуйста, покажите нам, что это делает, и объясните, что отличается от того, что вы хотите