从 FASTA 格式的文件中写入单个序列
Writing a single sequence from a file in FASTA format
给定一个FASTA格式的文件(your.file),例如:
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
但是 >Code1234_length1
之后的内容是未知的(在这个例子中它只是为了一个可重现的样本而知道的)。
我想获取 >Code1234_length1
之后的未知内容,包括字符串 >Code1234_length1
但在下一个 >
之前,并将其输出到新文件中。
即
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
这是怎么做到的?谢谢。
试试这个:
$ csplit -z test.txt '/^>/' '{*}'
示例:
$ cat test.txt
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
$ csplit -z test.txt '/^>/1' '{*}'
18
74
49
$ ls -1
test.txt
xx00
xx01
$ cat xx00
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
$ cat xx01
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
如果awk
是您的选择,请您尝试:
awk '
/^>Code1234_length1/ {f = 1; print; next} # if the keyword is found, set the flag,
# print the line and continue with the next line
f { # if the flag is set
if (/^>/) f = 0 # if next ">" is found, reset the flag
else print # otherwise print the line
}
' your.file > new.file
即使 >Code1234_length1
行后面有多行,它也能正常工作。
简单的awk:
awk 'BEGIN {RS=">"} [=10=] ~ /Code1335_length2/ { print ">"[=10=] }' file
将记录分隔符设置为“>”,然后搜索所需的代码字符串(不带“>”) 当我们找到匹配项时,打印记录($0)和一个“>”
这些是 FASTA 格式的序列。不要重新发明轮子。特别是,不要编写另一个 FASTA 解析器。相反,使用任何定制的生物信息学 tools/libraries 来处理它们。
例如,将seqtk
用作command-line工具(或BioPython
、BioPerl
等作为相应语言的库):
lh3/seqtk:用于处理 FASTA/Q 格式序列的工具包:https://github.com/lh3/seqtk
Extract sequences with names in file name.lst, one sequence name per
line:
seqtk subseq in.fq name.lst > out.fq
要安装 seqtk
,您可以像这样使用,例如 conda
:
conda create -n seqtk seqtk
示例:
cat > your.fasta <<EOF
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
EOF
echo 'Code1234_length1' > name.lst
seqtk subseq your.fasta name.lst > out.fasta
输出:
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
给定一个FASTA格式的文件(your.file),例如:
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
但是 >Code1234_length1
之后的内容是未知的(在这个例子中它只是为了一个可重现的样本而知道的)。
我想获取 >Code1234_length1
之后的未知内容,包括字符串 >Code1234_length1
但在下一个 >
之前,并将其输出到新文件中。
即
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
这是怎么做到的?谢谢。
试试这个:
$ csplit -z test.txt '/^>/' '{*}'
示例:
$ cat test.txt
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
$ csplit -z test.txt '/^>/1' '{*}'
18
74
49
$ ls -1
test.txt
xx00
xx01
$ cat xx00
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
$ cat xx01
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
如果awk
是您的选择,请您尝试:
awk '
/^>Code1234_length1/ {f = 1; print; next} # if the keyword is found, set the flag,
# print the line and continue with the next line
f { # if the flag is set
if (/^>/) f = 0 # if next ">" is found, reset the flag
else print # otherwise print the line
}
' your.file > new.file
即使 >Code1234_length1
行后面有多行,它也能正常工作。
简单的awk:
awk 'BEGIN {RS=">"} [=10=] ~ /Code1335_length2/ { print ">"[=10=] }' file
将记录分隔符设置为“>”,然后搜索所需的代码字符串(不带“>”) 当我们找到匹配项时,打印记录($0)和一个“>”
这些是 FASTA 格式的序列。不要重新发明轮子。特别是,不要编写另一个 FASTA 解析器。相反,使用任何定制的生物信息学 tools/libraries 来处理它们。
例如,将seqtk
用作command-line工具(或BioPython
、BioPerl
等作为相应语言的库):
lh3/seqtk:用于处理 FASTA/Q 格式序列的工具包:https://github.com/lh3/seqtk
Extract sequences with names in file name.lst, one sequence name per line:
seqtk subseq in.fq name.lst > out.fq
要安装 seqtk
,您可以像这样使用,例如 conda
:
conda create -n seqtk seqtk
示例:
cat > your.fasta <<EOF
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF
>Code1335_length2
AJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUNAJDHIEUN
EOF
echo 'Code1234_length1' > name.lst
seqtk subseq your.fasta name.lst > out.fasta
输出:
>Code1234_length1
ABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJFABCEDLKSDJF