目的
生工测序回来的文件名称比较复杂,且不能直接进行ITS2序列鉴定,之前都是一个文件一个文件的添加">"再用ITSx一个个的跑,耗费时间比较长,所以我想写一个脚本解放双手,总体的想法就是先改名,后生成表单,再依据表单批量生成ITSx的命令,再运行命令,最后删除不需要的结果。测试了下二十个样本1分钟左右处理完,大大解放了双手。
代码
以下代码是针对单端测序的:
rm *.ab1
#去除ab1文件
for file in *.seq;do mv "$file" "${file/.seq/}.fas";done
#修改后缀
for file in *.fas;do mv "$file" "${file/00*_*_(}";done
for file in *.fas;do mv "$file" "${file/)_/}";done
for file in *.fas;do mv "$file" "${file/[*]/}";done
#对有关符号进行修改,使最后结果比较简洁
ls *.fas > name.lst
#生成一个样品表单
sed -i '1i\\' *.fas | sed -i 's/^$/>1/' *.fas
#在所有文件前面加一个空行,再将空行替代为>1
awk '{print "ITSx -i "$1" -o "$1" -cpu 16"}' name.lst > ITSx.sh
#awk命令批量生成运行命令并输入到ITSx.sh脚本中
nohup sh ITSx.sh
#后台挂起运行
rm *.txt *.graph *.fas *.ITS1.fasta *.full.fasta *.fas_no_detections.fasta
#删除所有的不需要的文件,只保留ITS2序列
for file in *.fasta;do mv "$file" "${file/.fas.ITS2.fasta/}.fas";done
#对名称进行适当的调整,便于查看
以下代码是针对双端测序的:
rm *.ab1
#去除ab1文件
for file in *.seq;do mv "$file" "${file/.seq/}.fas";done
#修改后缀
for file in *.fas;do mv "$file" "${file/00*_*_(}";done
for file in *.fas;do mv "$file" "${file/)_/}";done
#对有关符号进行修改,使最后结果比较简洁
ls *.fas > name.lst
#生成一个样品表单
sed -i '1i\\' *.fas | sed -i 's/^$/>1/' *.fas
#在所有文件前面加一个空行,再将空行替代为>1
awk '{print "ITSx -i "$1" -o "$1" -cpu 16"}' name.lst > ITSx.sh
#awk命令批量生成运行命令并输入到ITSx.sh脚本中
nohup sh ITSx.sh
#后台挂起运行
rm *.txt *.graph *.fas *.ITS1.fasta *.full.fasta *.fas_no_detections.fasta
#删除所有的不需要的文件
for file in *.fasta;do mv "$file" "${file/.fas.ITS2.fasta/}.fas";done
#对名称进行适当的调整,便于查看
使用方法
将该脚本与测序文件放在同一个目录下,然后直接运行脚本即可。
网友评论