为不区分大小写的 sed 添加选项并替换 FASTA 文件中的字符串
Adding option to sed for case insensitivity and replacing a string of character in a FASTA file
我想创建一个文件,我可以在其中搜索并找到要在 Fasta 文件中更改的模式。下面的命令正在创建一个 .sh 脚本,其中包含它应该匹配和更改的所有模式:
tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed 's/<$gcenter>/$genbank/g' | " >>script.sh; done
我的文件是这样的:
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869
.sh 文件如下所示:
sed 's/scaffold40/JH739887/g' | sed 's/scaffold112/JH739888/g' | sed 's/scaffold41/JH739889/g' |
...
但是,我希望模式不区分大小写。我想在 sed 's/<$gcenter>/$genbank/g' | "
命令中添加一个 -e
。但是,当我添加标志时,它并没有打印在我的脚本中。任何想法为什么?
tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed -e 's/<$gcenter>/$genbank/g' | " >>script.sh; done
获得我的脚本后,我删除了最后一个管道并放入了我想要搜索和更改模式的fasta 文件。
最终目标是将您在下面的字符串中看到的 Scaffold###
替换为 JH######
。
>Scaffold410 275
TGCATTAATATGAGTGTGTGCTGCAAAAGTTCAGGTCATGGTCCGATCATACTTCACATTTTGGTAGCACTTTAAGCAGAGATCGGTTATCCCATTCTGTGGAAGACTCAACACTATCATAAGGTCCCACAGTTTTATTATCCCTCTGCCTCCCGGAATGCCCCCGGCAGTGAGGGGTACCATCTTCTCAGCAGTAAGGATATTCTTCAGGAGTTCCGTGTGAGCTTTCCCGGATTTAGTTCCATTTTTTAAATACTTCCCAATTCTTTGCTTTG
>Scaffold430 374
CTTTGTTAACTGAAAGAGCCTCTAAGTAGATGACCAGTGCTCAGTTAGTACAGTATGAATTTTGTTTAATGGAACAGGAAGATTTAGTATTGAGAAGCGGTTAAGGGTTTAACCCAGCCTCCTGTCTGAATGGACCTGAAGAGGGGGGCCGGGAAGAAACCCATGACTGCATTAAAGTGATAGATCTCCAGACATGGGCTAGGGAAGATTTACAAGACACTCCCTGGCCTGAGGGAGAAAATATGTTTATTGATGAGTCTTCAAGGGTGGCAGAAGGGAAGCGATTTACAGGATACACAATCATTAATGGAAGGAAATTAAAGGAAGGGGGGAGATTGTCACCCACCTGGTCAGTTCAGACAGCAGAGCTGTAT
我正在使用 bash 命令来执行此操作。但即使在更换 -e
标志后它也不起作用。
我知道我迟到了,但也许这对其他人也有用。
要解决 OP 问题,他必须像这样创建一个 script.sh:
sed -e 's/scaffold40/JH739887/gi' -e 's/scaffold112/JH739888/gi' -e 's/scaffold41/JH739889/gi' ...
-e
允许在同一个 sed
命令中包含各种脚本。
s/<searchText>/<replaceText>/gi
全局搜索和替换 g
并且 i
忽略大小写
也就是说,我认为您真正想做的是用 "GenBank Accession.version"[= 替换列 "Genome Center name" 57=] 在你的数据文件中。
如果是这种情况,可以使用此 awk
命令:
awk '{ if(NR>1)=; print }' scaffold_names_2.txt > scaffold_names_2.new.txt
说明
awk
是一种编程语言(类似 C 的语法),它可以处理文本文件中的行(每次一行)。
NR
包含当前记录数
$i
在当前行内包含一个字段(</code>:第一个字段,<code>
,第二个,依此类推)
print
打印当前行。
执行
$ cat scaffold_names_2.txt
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869
$ awk '{ if(NR>1) =; print}' scaffold_names_2.txt > scaffold_names_2.new.txt
$ cat scaffold_names_2.new.txt
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name
GeoFor_1.0 JH739887 NW_005054297 JH739887 GPS_002009865
GeoFor_1.0 JH739888 NW_005054298 JH739888 GPS_002009866
GeoFor_1.0 JH739889 NW_005054299 JH739889 GPS_002009867
GeoFor_1.0 JH739890 NW_005054300 JH739890 GPS_002009868
GeoFor_1.0 JH739891 NW_005054301 JH739891 GPS_002009869
我想创建一个文件,我可以在其中搜索并找到要在 Fasta 文件中更改的模式。下面的命令正在创建一个 .sh 脚本,其中包含它应该匹配和更改的所有模式:
tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed 's/<$gcenter>/$genbank/g' | " >>script.sh; done
我的文件是这样的:
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869
.sh 文件如下所示:
sed 's/scaffold40/JH739887/g' | sed 's/scaffold112/JH739888/g' | sed 's/scaffold41/JH739889/g' |
...
但是,我希望模式不区分大小写。我想在 sed 's/<$gcenter>/$genbank/g' | "
命令中添加一个 -e
。但是,当我添加标志时,它并没有打印在我的脚本中。任何想法为什么?
tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed -e 's/<$gcenter>/$genbank/g' | " >>script.sh; done
获得我的脚本后,我删除了最后一个管道并放入了我想要搜索和更改模式的fasta 文件。
最终目标是将您在下面的字符串中看到的 Scaffold###
替换为 JH######
。
>Scaffold410 275
TGCATTAATATGAGTGTGTGCTGCAAAAGTTCAGGTCATGGTCCGATCATACTTCACATTTTGGTAGCACTTTAAGCAGAGATCGGTTATCCCATTCTGTGGAAGACTCAACACTATCATAAGGTCCCACAGTTTTATTATCCCTCTGCCTCCCGGAATGCCCCCGGCAGTGAGGGGTACCATCTTCTCAGCAGTAAGGATATTCTTCAGGAGTTCCGTGTGAGCTTTCCCGGATTTAGTTCCATTTTTTAAATACTTCCCAATTCTTTGCTTTG
>Scaffold430 374
CTTTGTTAACTGAAAGAGCCTCTAAGTAGATGACCAGTGCTCAGTTAGTACAGTATGAATTTTGTTTAATGGAACAGGAAGATTTAGTATTGAGAAGCGGTTAAGGGTTTAACCCAGCCTCCTGTCTGAATGGACCTGAAGAGGGGGGCCGGGAAGAAACCCATGACTGCATTAAAGTGATAGATCTCCAGACATGGGCTAGGGAAGATTTACAAGACACTCCCTGGCCTGAGGGAGAAAATATGTTTATTGATGAGTCTTCAAGGGTGGCAGAAGGGAAGCGATTTACAGGATACACAATCATTAATGGAAGGAAATTAAAGGAAGGGGGGAGATTGTCACCCACCTGGTCAGTTCAGACAGCAGAGCTGTAT
我正在使用 bash 命令来执行此操作。但即使在更换 -e
标志后它也不起作用。
我知道我迟到了,但也许这对其他人也有用。
要解决 OP 问题,他必须像这样创建一个 script.sh:
sed -e 's/scaffold40/JH739887/gi' -e 's/scaffold112/JH739888/gi' -e 's/scaffold41/JH739889/gi' ...
-e
允许在同一个sed
命令中包含各种脚本。s/<searchText>/<replaceText>/gi
全局搜索和替换g
并且i
忽略大小写
也就是说,我认为您真正想做的是用 "GenBank Accession.version"[= 替换列 "Genome Center name" 57=] 在你的数据文件中。
如果是这种情况,可以使用此 awk
命令:
awk '{ if(NR>1)=; print }' scaffold_names_2.txt > scaffold_names_2.new.txt
说明
awk
是一种编程语言(类似 C 的语法),它可以处理文本文件中的行(每次一行)。NR
包含当前记录数$i
在当前行内包含一个字段(</code>:第一个字段,<code>
,第二个,依此类推)print
打印当前行。
执行
$ cat scaffold_names_2.txt
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869
$ awk '{ if(NR>1) =; print}' scaffold_names_2.txt > scaffold_names_2.new.txt
$ cat scaffold_names_2.new.txt
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name
GeoFor_1.0 JH739887 NW_005054297 JH739887 GPS_002009865
GeoFor_1.0 JH739888 NW_005054298 JH739888 GPS_002009866
GeoFor_1.0 JH739889 NW_005054299 JH739889 GPS_002009867
GeoFor_1.0 JH739890 NW_005054300 JH739890 GPS_002009868
GeoFor_1.0 JH739891 NW_005054301 JH739891 GPS_002009869