删除包含短语“random”的所有序列

时间:2013-02-19 08:52:14

标签: replace sed awk fasta

这是我输入的样子:

>a
AACTCTCTC
CGTGCTCTC
>b_random
ACTGSTSTS
CTCTCTCCT
ATATATA
>c
AACTCTCTC
CGTGCTCTC
>d
AACTCTCTC
CGTGCTCTC
CGTGCTCTC
>e_random
ACTGSTSTS
CTCTCTCCT
ATATATA
>c_random
ACTGSTSTS
CTCTCTACT
GSTSTSCTC
TCTCCTCCT
ATATATA

我想删除包含短语" random" - 序列始终以">"开头并在另一个序列开始时结束。

在这种情况下,我想获得3个文件:

A.TXT

>a
AACTCTCTC
CGTGCTCTC

c.txt

>c
AACTCTCTC
CGTGCTCTC

d.txt

>d
AACTCTCTC
CGTGCTCTC
CGTGCTCTC

现在,我不能强迫sed做我想做的事。我从这开始:

 sed 's/random.*random//g' sample_data

什么不起作用。非常感谢你。

4 个答案:

答案 0 :(得分:2)

最简单的方法是使用awk和合理的RS / ORS设置:

awk '$1 !~ /random/ { print RS $0 > $1 ".txt"; close($1 ".txt" }' RS='>' ORS=''

如果您的说明行中包含空格,则还需要设置FS='\n'

答案 1 :(得分:2)

这是使用应处理大文件的awk的一种方式:

awk '/^>/ { i=substr($0,2) } i ~ /random/ { i="" } i { print > i ".txt" }' file

grep . *.txt的结果:

a.txt:>a
a.txt:AACTCTCTC
a.txt:CGTGCTCTC
c.txt:>c
c.txt:AACTCTCTC
c.txt:CGTGCTCTC
d.txt:>d
d.txt:AACTCTCTC
d.txt:CGTGCTCTC
d.txt:CGTGCTCTC

答案 2 :(得分:1)

awk '/\>/ && $0!~/random/{file=substr($0,2)".txt";f=1}{if($0~/random/)f=0;if(f)print>file}' your_file

答案 3 :(得分:1)

另一个不使用RS来避免限制的awk

awk -F\> '/>/{close(f); f=/random/?x:$2 ".txt"} f{print>f}' file

此版本还关闭文件并使用变量作为文件名,因为某些awks无法处理连接的打印目标。