如何用awk或bash筛选含非A/U/C/G字符的FASTA序列?
问题修正说明
你原有代码的核心问题是正则逻辑错误:/AUGC/的匹配规则是查找是否存在连续的AUGC四个字符,完全不符合「检测是否存在AUCG以外字符」的需求。你需要使用字符集取反的正则语法实现需求。
正确实现代码
awk '/^>/{h=$0;getline s;if(s ~ /[^AUCG]/) print h"\n"s}' sample
逻辑说明
- 匹配到以
>开头的序列头行时,先将行内容存入变量h - 调用
getline读取下一行的序列内容存入变量s - 用正则
/[^AUCG]/判断:中括号内的^代表取反,即匹配所有不在A/U/C/G范围内的字符,只要匹配到就输出对应的序列头和序列内容
该代码在你提供的测试输入上运行可直接得到预期输出结果。
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

