很久前遇到的一个问题,今天又偶然想起和大家分享,就是我们使用gtf做注释在比对或者组装基因、转录本的时候回报错,时常是因为基因组时和ref不对应(比如建立索引时有chr,组装时gtf没有chr等;其中hisat2等软件可以用参数设置来避免:–remove-chrname和–add-chrname)
下面我们用perl来快速替换chr和添加chr:
如上,gtf文件中染色体没有chr只是数字,我用命令行来添加chr
# 直接修改,无备份
perl -pi -e 's/^(\d+)/chr$1/' test.gtf
# 修改,且保留备份.bak,注意-i和.bak之间不用空格
perl -p -i.bak -e 's/^(\d+)/chr$1/' test.gtf
其中参数:
-i extension:在使用 循环遍历文件时启用原位编辑模式。 如果没有规定扩展名的话,则原位修改各行内容,否则使用扩展名来修改输入文件名(以便充当备份文件),并使用原位编辑的原文件名创建输出文件。
-p:使 Perl 隐式地循环遍历指定的文件,同时打印所有的行。
-e command:用于再命令行而不是在脚本中执行 Perl 命令。
同理我们也可以去掉chr:
# 直接去掉
perl -pi -e 's/^chr(\d+)/$1/' test.gtf
如果需要批量修改某文件,可以采用和find连用:
find ./ -name "*.gtf" | xargs perl -p -i.bak -e 's/^(\d+)/chr$1/'
参考资料:
1.https://metacpan.org/
陈浩
当然这个也可以衍生出很多批量替换文本的方法,大家可以自由发挥。