在使用一些生信软件前,你需要将你自己的数据整理成软件要求的格式,软件以及流程跑完了产出的文件,也需要整理成你自己想要的格式,以便于你将结果投喂给下一个软件或者进行可视化。我这个批量修改近乎于手动修改(笨办法),有很大的改进空间,这次只是记录一下。
Shell和正则表达的熟练之路还很远。
1. 修改的需求
将如">BD177_00001 Beta-glucoside kinase"这样的headers name
改成>gi|NA|ref|BD177_00001|Beta-glucoside kinase
2. 批量修改
#在BD177前加>gi|NA|ref|
sed -i "s/>BD177/>gi|NA|ref|BD177/" BD177.faa
#将BD177_00001后面的空格改成|
sed -r -i 's/\s+/\|/' BD177.faa
#上述代码成功,下面使用for循环批量修改fasta文件head name
#首先获得需要修改的fasta文件的名称列表并存在一个文件中
find . -type f -name "*.faa" > 00_rename_list
#打开rename_list发现,开头有./,末尾有.faa,将其删除掉
sed -i 's/\.\///' 00_rename_list
sed -i 's/\.faa//' 00_rename_list
#批量修改,head name中加入>gi|NA|ref|
for i in $(cat rename_list); do sed -i "s/>${i}/>gi|NA|ref|${i}/" ${i}.faa; done
#批量修改,head name中的_00001后面的空格改成|
for i in $(cat rename_list); do sed -r -i 's/\s+/\|/' ${i}.faa; done
应该是可以一行sed命令解决问题,悲伤!