这是我输入的样子:
>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
什么不起作用。非常感谢你。
答案 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无法处理连接的打印目标。