使用awk按跨列多模式条件删除GFF文件指定记录的实现问题
GFF注释文件过滤awk命令解决方案
核心错误原因
你之前将字段分隔符设为;会破坏GFF文件默认的9列制表符分隔结构,导致无法正常匹配第3列和最后一列的内容,所以筛选失效。
正确过滤命令
直接输出过滤后文件
awk 'BEGIN{FS="\t"} !($3 ~ /exon|guide_RNA|lnc_RNA|mRNA|snoRNA|snRNA|transcript/ && $9 ~ /gene=/ && $9 !~ /transcript_id=/) {print}' 你的输入文件.gff > 过滤后输出文件.gff
先验证待删除的行是否正确
如果需要先核对要删除的行是否符合预期,执行以下命令仅打印待删除行:
awk 'BEGIN{FS="\t"} $3 ~ /exon|guide_RNA|lnc_RNA|mRNA|snoRNA|snRNA|transcript/ && $9 ~ /gene=/ && $9 !~ /transcript_id=/ {print}' 你的输入文件.gff
注意事项
- 匹配逻辑对大小写敏感,如果你的GFF文件中属性为大写开头的
Gene=或Transcript_id=,自行修改正则中的字符串大小写即可。 - 如果使用的是GFF3格式,属性分隔符为
;加空格,本命令不需要额外调整,直接匹配字符串即可。
内容的提问来源于stack exchange,提问作者user5719890
相关产品推荐
相关产品推荐

