我想从看起来像这样的数据中删除所有'N':
>Seq1
NNNNNNNNA
NNNNNNNNN
ATCGGGGGG
NNNNNNNNN
GTCGGGGGG
>Seq2
GATAAAAAA
NNNNNNNNN
这样它就会返回:
>Seq1
AATCGGGGGGGTCGGGGGG
>Seq2
GATAAAAAA
但为什么不这样做:
sed -e 's/N//g'
采用这种方法的正确方法是什么?
答案 0 :(得分:2)
这是我的Perl解决方案:
perl -pe 'if (!/^>/) { tr/N\n//d } elsif ($. > 1) { $_ = "\n$_" }' input-file
答案 1 :(得分:1)
答案 2 :(得分:1)
这可能对您有用:
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
答案 3 :(得分:1)
简单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
答案 4 :(得分:0)
你需要'\ n'来匹配换行符:
sed -e 's/[N\n]//g'
如果这不符合您的要求,请告诉我们,它的作用并解释与您想要的不同