Split file to fasta代码技术疑问:匹配>chr后序列如何写入输出文件?
关于awk拆分FASTA文件代码的疑问解答
刚好我对这段awk代码熟得很,来给你拆解明白~
你疑惑的点特别关键:代码里明明只匹配了^>chr开头的行,那后续的序列怎么自动对应写入到正确的文件里?其实这段代码是靠条件触发+全局执行的组合逻辑来工作的,拆解来看:
1. 输出文件名的触发逻辑
/^>chr/ {OUT=substr($0,2) ".fa"}
这行是个条件执行块:只有当当前行是以>chr开头的时候(也就是FASTA的序列ID行),才会执行大括号里的操作:
- 用
substr($0,2)把行首的>去掉,比如>chr1会变成chr1; - 加上
.fa后缀,赋值给变量OUT——这就确定了接下来要写入的输出文件名。
2. 所有行的全局写入逻辑
{print >> OUT; close(OUT)}
这部分是全局执行的!不管当前行是不是序列ID行,每一行都会执行这个操作:
- 把当前行追加(
>>)写入到OUT指向的文件里; - 写完立刻关闭文件(
close(OUT)),避免打开文件过多触发系统限制。
举个实际例子你就懂了
假设你的输入FASTA是这样的:
>chr1 ATCGATCG GGCCGGCC >chr2 TTAAGGCC
执行代码的过程是:
- 读到
>chr1:触发第一部分逻辑,OUT被设为chr1.fa,然后执行全局逻辑,把>chr1写入chr1.fa; - 读到
ATCGATCG:没触发第一部分,直接执行全局逻辑,把这行写入当前的chr1.fa; - 读到
GGCCGGCC:同理,继续写入chr1.fa; - 读到
>chr2:触发第一部分,OUT更新为chr2.fa,然后把>chr2写入chr2.fa; - 读到
TTAAGGCC:写入chr2.fa。
这样一来,每个染色体的ID和对应的序列就都被分到了各自的.fa文件里啦~
内容的提问来源于stack exchange,提问作者DS123
相关产品推荐
相关产品推荐

