0

我有一个修改过的 gff 文件,它缺少原始 gff 文件中存在的一些行。我想把它们加回去。

即,在每个新的 contig 之前包含额外的行“# Fasta ...”和“##sequence-region”的原始 gff 文件:

1 # Fasta 定义行:>contig00047
2 ##sequence-region
3 contig00047 AUGUSTUS old annotation
4 contig00047 AUGUSTUS old annotation
5 contig00047 AUGUSTUS old annotation
6 contig00047 AUGUSTUS old annotation
7 contig00047 AUGUSTUS old annotation
8 contig00047 AUGUSTUS old annotation
9 # Fasta 定义行: >contig00048
10 ##sequence-region
11 contig00048 AUGUSTUS 旧注释
12 contig00048 AUGUSTUS 旧注释
13 contig00048 AUGUSTUS 旧注释
14 contig00048 AUGUSTUS 旧注释

这是新修改的 gff 文件格式,缺少那些额外的行:

1 contig00047 AUGUSTUS new annotation
2 contig00047 AUGUSTUS new annotation
3 contig00047 AUGUSTUS new annotation
4 contig00047 AUGUSTUS new annotation
5 contig00047 AUGUSTUS new annotation
6 contig00047 AUGUSTUS new annotation
7 contig00048 AUGUSTUS new annotation
8 contig00048 AUGUSTUS new annotation
9 contig00048 AUGUSTUS new annotation
10 contig00048 AUGUSTUS new annotation

这就是我想要的:

1 # Fasta 定义行:>contig00047
2 ##sequence-region
3 contig00047 AUGUSTUS new annotation
4 contig00047 AUGUSTUS new annotation
5 contig00047 AUGUSTUS new annotation
6 contig00047 AUGUSTUS new annotation
7 contig00047 AUGUSTUS new annotation
8 contig00047 AUGUSTUS new annotation
9 # Fasta 定义行: >contig00048
10 ##sequence-region
11 contig00048 AUGUSTUS 新注释
12 contig00048 AUGUSTUS 新注释
13 contig00048 AUGUSTUS 新注释
14 contig00048 AUGUSTUS 新注释

我已将原始文件引入 R 并更新了注释,但它丢失了以“#”开头的行。我需要那些回来让我的 gff 有效。我尝试使用 grep 来获取原始 gff 中以 # 开头的所有行的行号:

$ grep -n "#' Renamed_Blast2GO_gff_without_contig.gff | cut -f1 -d: > line.txt

然后我在 gedit 中打开 line.txt 并搜索并将所有 \n' 替换为 G; 在第 1 行中获取一个长字符串。然后我在修改后的 gff 文件中使用 sed 在第 1 行字符串中指定的每个行号之后添加空行:

$ sed '<\paste line 1 string here>' mod2_gff.gff
ie,
$ sed '1G;2G;9G;10G' mod2_gff.gff # 我的文件实际上非常大,所以它变得很长,但仍然有效。

现在我想用原始文件中的行替换修改后的文件中的空行。我尝试了各种方法,但无法使其正常工作。字符串“##sequence-region”不是唯一的,因此在这种情况下进行键值设置将不起作用。我不确定是否可以逐行查询,并查看下一行何时有新的重叠群编号,然后在其上方插入两行与匹配的 #Fasta 定义行和 ##sequence-region线?

感谢大家提供的任何帮助!

4

1 回答 1

0

awk救援!

只需将缺少的标题添加到新文件中

$ awk 'p!=$1 {print "# Fasta definition line: >" $1; 
              print "##sequence-region"; 
              p=$1}1' file

# Fasta definition line: >contig00047
##sequence-region
contig00047 AUGUSTUS new annotation
contig00047 AUGUSTUS new annotation
contig00047 AUGUSTUS new annotation
contig00047 AUGUSTUS new annotation
contig00047 AUGUSTUS new annotation
contig00047 AUGUSTUS new annotation
# Fasta definition line: >contig00048
##sequence-region
contig00048 AUGUSTUS new annotation
contig00048 AUGUSTUS new annotation
contig00048 AUGUSTUS new annotation
contig00048 AUGUSTUS new annotation
于 2017-10-20T20:31:24.120 回答