Удаление символов и удаление пустых строк с помощью SED / Perl - PullRequest
2 голосов
/ 19 января 2012

Я хочу удалить все 'N' из данных, которые выглядят следующим образом:

>Seq1
NNNNNNNNA
NNNNNNNNN
ATCGGGGGG
NNNNNNNNN
GTCGGGGGG
>Seq2
GATAAAAAA
NNNNNNNNN

Так что он возвращает:

>Seq1
AATCGGGGGGGTCGGGGGG
>Seq2
GATAAAAAA

Но почему это не так:

sed -e 's/N//g' 

Как правильно подойти к этому?

Ответы [ 5 ]

2 голосов
/ 19 января 2012

Вот мое решение Perl:

perl -pe 'if (!/^>/) { tr/N\n//d } elsif ($. > 1) { $_ = "\n$_" }' input-file
1 голос
/ 19 января 2012

Простой 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
1 голос
/ 19 января 2012

Это может работать для вас:

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
1 голос
/ 19 января 2012

Использование:

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

[N \ n] соответствует либо Ns, либо новым строкам.Остальное взято из этого вопроса на StackOverflow .

0 голосов
/ 19 января 2012

вам нужно '\ n', чтобы соответствовать символам новой строки:

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

, если это не дает того, что вы хотите, пожалуйста, покажите нам, что это делает, и объясните, что отличается от того, что вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...