如何删除FASTA文件中头部无日期信息的序列记录
你给出的示例FASTA头行以|为分隔符,日期格式为YYYY-MM-DD且固定位于第三个字段,以下方案均基于该格式规则设计:
方法1:使用生物信息学专用工具Seqkit(推荐,容错率高)
Seqkit是FASTA/Q文件处理的常用工具,支持超大文件流式处理,不会出现换行、序列截断类的错误:
运行命令:
seqkit grep -r -p '^>[^|]+\|[^|]+\|\d{4}-\d{2}-\d{2}\|' 你的输入文件.fasta -o 过滤后输出文件.fasta
命令参数说明:
-r:启用正则表达式匹配模式-p:指定匹配规则,这里只会保留头行以>开头、第三个字段为YYYY-MM-DD格式日期的序列
方法2:使用系统自带awk命令(无需安装额外工具)
Linux、macOS系统均自带awk工具,无需额外安装,直接运行以下命令即可:
awk '/^>/{keep=0; if($0 ~ /\|[0-9]{4}-[0-9]{2}-[0-9]{2}\|/) keep=1} keep' 你的输入文件.fasta > 过滤后输出文件.fasta
命令逻辑说明:
- 每次遇到
>开头的序列头行时,先默认标记为不保留 - 检查头行是否包含
|YYYY-MM-DD|格式的日期字段,符合要求则标记为保留 - 所有标记为保留的头行和对应的序列都会输出到结果文件
可选优化(避免误匹配)
如果确认日期固定为头行第三个|分隔的字段,可以把规则写得更严格,避免其他位置出现类似格式的字符串导致误判:
awk 'BEGIN{FS="|"} /^>/{keep=0; if($3 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) keep=1} keep' 你的输入文件.fasta > 过滤后输出文件.fasta
结果校验
处理完成后可以统计前后的序列数量确认过滤效果:
# 同时统计输入和输出文件的序列数 grep -c '^>' 你的输入文件.fasta 过滤后输出文件.fasta
内容的提问来源于stack exchange,提问作者khashayar ehteshami
相关产品推荐
相关产品推荐

