情况介绍
之前的注释,比如NCC和BA,虽然改了名字,但是这些排序上相邻的基因在基因组上的坐标不是相邻的,这样可能有些不太美观,主要是没法看duplication的基因,观察这些规律等等。因此,v4将重新对注释文件中的基因按照坐标进行排序,然后重新命名。至于已有的NCC和BA版本的注释文件,考虑到已经流传开来,这里将制作新的对应表。注释的内容实际上没有改变,只是ID名字再次更新。
ID名稍微做一些调整,具体就是这样,就是增加一个-
NCC版注释:ID=Tgra01G00010
NCC排序版注释:ID=Tgra01G-00010
操作流程(NCC)
- 分割NCC的注释文件成11个染色体的注释,一个contig的注释
awk '{if ($1 ~ /^Chr[0-9]+$/) print > $1".gff"}' Tgra.chr.convert2.gff
awk '{if ($1 !~ /^Chr[0-9]+$/) print}' Tgra.chr.convert2.gff > ptg.gff
- 提取基因ID和起始、终止位置和正反链4列内容
- 这里只放一个染色体
awk '$3=="gene"{split($9,a,";"); id=a[1]; sub(/^ID=/,"",id); print id "\t" $4 "\t" $5 "\t" $7}' Chr1.gff > chr1.txt
- 按照坐标对基因进行排序
- 把内容拆分成正义链和反义链,正义链放在上半部分,反义链放在下半部分
- 按照起始和终止位置,对基因进行排序,递增(起始和终止)
{ awk '$4=="+"' gene_coords.txt | sort -k2,2n -k3,3n; awk '$4=="-"' chr1.txt | sort -k2,2n -k3,3n; } > chr1_sorted.txt
- 根据先前排序号的基因id,提取注释文件
- 按照拍过顺序的基因id提取得到的注释文件也是排序好的
while read id start end strand; do
grep "$id" Chr1.gff
done < chr1_sorted.txt > Chr1_sorted.gff
- 修改注释文件的id
- 脚本convert2.sh,https://www.kdocs.cn/l/cdJRauELhrfX用到过的,算是ncc版特制的
- 示例:Tgra01G-00020,前缀Tgra已经写好,这里需要输入的只有01G-(染色体编号和后缀-)部分,至于基因ID编号则是按照文本从上到下自动命名
bash convert2.sh -i Chr1_sorted.gff -c 01G-
- 单独处理ptg.gff
- 提取id,这一步也需要改变
- contig部分的序列太多,这里的命名方式以contig的编号为主,代替原先的基因id
- 提取id,这一步也需要改变
awk '$3=="gene"{print $1 "\t" $4 "\t" $5 "\t" $7}' ptg.gff > ptg.txt
- 排序,这里按照序列片段的编号进行排序,然后再按照坐标进行排序
- 先按照正义链和反义链分为两部分,正义链的在上,反义链的在下
- 序列编号有两个数字部分,以_分为三部分,第一部分的数字夹杂在ptg和l中间,作为第一顺序依据;第三部分的数字则是作为第二顺序排序依据。
{
awk '
{
split($1, parts, "_");
# 提取 ptg 和 l 之间数字
if (match(parts[1], /^ptg([0-9]+)l$/, arr)) {
prefix_num = arr[1] + 0; # 转数字,去前导0
} else {
prefix_num = 0;
}
fragment_num = parts[3] + 0; # fragment 后数字
if ($4 == "+") {
print prefix_num "\t" fragment_num "\t" $0
}
}' ptg.txt | sort -k1,1n -k2,2n | cut -f3-
awk '
{
split($1, parts, "_");
if (match(parts[1], /^ptg([0-9]+)l$/, arr)) {
prefix_num = arr[1] + 0;
} else {
prefix_num = 0;
}
fragment_num = parts[3] + 0;
if ($4 == "-") {
print prefix_num "\t" fragment_num "\t" $0
}
}' ptg.txt | sort -k1,1n -k2,2n | cut -f3-
} > ptg_sorted.txt
- 序列id去重
- 先前忘记考虑一条序列上可能存在多个基因,以至于序列id重复出现,这导致在后面的提取注释内容的时候,得到的基因数量也随之翻倍
- 这里去重后保留下来的所有序列,一共331条,ptg.gff的基因数量为620
awk '!seen[$1]++' ptg_sorted.txt > ptg_sorted_unique.txt
- 根据排序后的序列编号提取注释内容
- 上面的没法用,让G老师重新写了一个
- 根据ptg_sorted.txt第一列,序列编号进行查询;序列编号需要完全匹配,而不是部分匹配。
while read id start end strand; do
grep -E "^${id}[[:space:]]" ptg.gff
done < ptg_sorted_unique.txt > ptg_sorted.gff
- id重命名
bash convert2.sh -i ptg_sorted.gff -c _ptg-
- 合并所有的注释文件
cat Chr1_sorted_convert.gff \
Chr2_sorted_convert.gff \
Chr3_sorted_convert.gff \
Chr4_sorted_convert.gff \
Chr5_sorted_convert.gff \
Chr6_sorted_convert.gff \
Chr7_sorted_convert.gff \
Chr8_sorted_convert.gff \
Chr9_sorted_convert.gff \
Chr10_sorted_convert.gff \
Chr11_sorted_convert.gff \
ptg_sorted_convert.gff \
> Tgra.chr.convert2_order.gff
- 检查一下数量,看看有没有漏掉的
- 32056,数量ok
grep -cP '^\S+\s+\S+\s+gene\s' Tgra.chr.convert2_order.gff
- 制作NCC版本和NCC排序版的基因id对应表
python compare_gff.py -i Tgra.chr.convert2.gff -l Tgra.chr.convert2_order.gff -o ncc_order_comparison.tsv
- 每个gene之间插入一个空行,这样视觉上更好看一下,每个基因也分的更加清楚,对注释内容本身没有影响
awk 'NR>1 && $3=="gene"{print ""} {print}' Tgra.chr.convert2_order.gff > female_ncc_order.gff3
附件
ncc_order注释路径
/data2/liyupeng/alice/output/female_anno/female_ncc_order_gff
ba_order注释路径
/data2/liyupeng/alice/output/female_anno/female_mark1_rename_order_gff
结果图