如何调整awk命令在文件开头新增标记列且不覆盖原有第一列
调整后的awk命令及说明
你原来的命令直接修改了$1的值,因此会覆盖原第一列内容。要将标记作为新首列添加,只需先计算标记值,再将其放在原整行前输出即可,同时注意保留GTF文件原生的制表符分隔格式,避免字段错位。
基础可用版本
awk 'BEGIN{FS=OFS="\t"} {tag="coding"; if($12 ~ /RNA|mir-/ || $3 == "pseudogene") tag="non-coding"; print tag, $0}' a.gene-pseudogene_all_dmel-all-r6.40.gtf
参数说明:
BEGIN{FS=OFS="\t"}:指定输入、输出的字段分隔符均为制表符,完全匹配GTF文件格式,不会打乱原有字段的分隔格式- 先给标记变量
tag默认赋值为coding,满足判断条件时修改为non-coding,全程不会修改原有任何字段的内容 print tag, $0:先输出标记值,再输出原整行内容,标记自动成为新的第一列,原有所有列完整保留
兼容GTF注释行版本
如果你的文件开头有#开头的注释行,不想给注释行加标记,可使用以下版本:
awk 'BEGIN{FS=OFS="\t"} /^#/{print;next} {tag="coding"; if($12 ~ /RNA|mir-/ || $3 == "pseudogene") tag="non-coding"; print tag, $0}' a.gene-pseudogene_all_dmel-all-r6.40.gtf
该版本会直接原样输出所有注释行,仅对正常的数据行添加标记列。
内容的提问来源于stack exchange,提问作者Amaranta_Remedios
相关产品推荐
相关产品推荐

