用另一个文件中相同行号的相同行替换一个文件中的多行?
Replace multiple lines in one file with the same lines at the same line numbers in another file?
我有一个修改过的 gff 文件,它缺少原始 gff 文件中存在的一些行。我想把它们加回去。
即
原始 gff 文件,在每个新重叠群之前包含额外的行“# Fasta ...”和“##sequence-region”:
1 # Fasta 定义行:>contig00047
2 ##序列区域
3 contig00047 AUGUSTUS 旧注释
4 contig00047 AUGUSTUS 旧注释
5 contig00047 AUGUSTUS 旧注释
6 contig00047 AUGUSTUS 旧注释
7 contig00047 AUGUSTUS 旧注释
8 contig00047 AUGUSTUS 旧注释
9 # Fasta 定义行:>contig00048
10 ##序列区域
11 contig00048 AUGUSTUS 旧注释
12 contig00048 AUGUSTUS 旧注释
13 contig00048 AUGUSTUS 旧注释
14 contig00048 AUGUSTUS 旧注释
这里是新修改的 gff 文件格式,缺少那些额外的行:
1 contig00047 AUGUSTUS 新注释
2 contig00047 AUGUSTUS 新注释
3 contig00047 AUGUSTUS 新注释
4 contig00047 AUGUSTUS 新注释
5 contig00047 AUGUSTUS 新注释
6 contig00047 AUGUSTUS 新注释
7 contig00048 AUGUSTUS 新注释
8 contig00048 AUGUSTUS 新注释
9 contig00048 AUGUSTUS 新注释
10 contig00048 AUGUSTUS 新注释
这就是我想要的:
1 # Fasta 定义行:>contig00047
2 ##序列区域
3 contig00047 AUGUSTUS 新注释
4 contig00047 AUGUSTUS 新注释
5 contig00047 AUGUSTUS 新注释
6 contig00047 AUGUSTUS 新注释
7 contig00047 AUGUSTUS 新注释
8 contig00047 AUGUSTUS 新注释
9 # Fasta 定义行:>contig00048
10 ##序列区域
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
i.e.,
$ sed '1G;2G;9G;10G' mod2_gff.gff # My file is actually really big, so this gets quite long, but still works.
现在我想用原始文件中的行替换修改后文件中的空行。我尝试了各种方法,但一直无法正常工作。字符串“##sequence-region”不是唯一的,因此在这种情况下进行键值设置将不起作用。我不确定是否可以逐行查询,并查看下一行何时有新的重叠群编号,然后在其上方插入两行匹配的#Fasta 定义行和##sequence-region线?
感谢大家提供的任何帮助!
awk
救援!
只需将缺少的headers添加到新文件
$ awk 'p!= {print "# Fasta definition line: >" ;
print "##sequence-region";
p=}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
我有一个修改过的 gff 文件,它缺少原始 gff 文件中存在的一些行。我想把它们加回去。
即 原始 gff 文件,在每个新重叠群之前包含额外的行“# Fasta ...”和“##sequence-region”:
1 # Fasta 定义行:>contig00047
2 ##序列区域
3 contig00047 AUGUSTUS 旧注释
4 contig00047 AUGUSTUS 旧注释
5 contig00047 AUGUSTUS 旧注释
6 contig00047 AUGUSTUS 旧注释
7 contig00047 AUGUSTUS 旧注释
8 contig00047 AUGUSTUS 旧注释
9 # Fasta 定义行:>contig00048
10 ##序列区域
11 contig00048 AUGUSTUS 旧注释
12 contig00048 AUGUSTUS 旧注释
13 contig00048 AUGUSTUS 旧注释
14 contig00048 AUGUSTUS 旧注释
这里是新修改的 gff 文件格式,缺少那些额外的行:
1 contig00047 AUGUSTUS 新注释
2 contig00047 AUGUSTUS 新注释
3 contig00047 AUGUSTUS 新注释
4 contig00047 AUGUSTUS 新注释
5 contig00047 AUGUSTUS 新注释
6 contig00047 AUGUSTUS 新注释
7 contig00048 AUGUSTUS 新注释
8 contig00048 AUGUSTUS 新注释
9 contig00048 AUGUSTUS 新注释
10 contig00048 AUGUSTUS 新注释
这就是我想要的:
1 # Fasta 定义行:>contig00047
2 ##序列区域
3 contig00047 AUGUSTUS 新注释
4 contig00047 AUGUSTUS 新注释
5 contig00047 AUGUSTUS 新注释
6 contig00047 AUGUSTUS 新注释
7 contig00047 AUGUSTUS 新注释
8 contig00047 AUGUSTUS 新注释
9 # Fasta 定义行:>contig00048
10 ##序列区域
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
i.e.,
$ sed '1G;2G;9G;10G' mod2_gff.gff # My file is actually really big, so this gets quite long, but still works.
现在我想用原始文件中的行替换修改后文件中的空行。我尝试了各种方法,但一直无法正常工作。字符串“##sequence-region”不是唯一的,因此在这种情况下进行键值设置将不起作用。我不确定是否可以逐行查询,并查看下一行何时有新的重叠群编号,然后在其上方插入两行匹配的#Fasta 定义行和##sequence-region线?
感谢大家提供的任何帮助!
awk
救援!
只需将缺少的headers添加到新文件
$ awk 'p!= {print "# Fasta definition line: >" ;
print "##sequence-region";
p=}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