编辑解决方案:https://tejashree1modak.github.io/bioblogs/fasta_rename/
我希望在unix中使用scaffold_mapping.txt文件重命名我的脚手架,其中.txt文件看起来像:
$ head scaffold_mapping.txt
>#ID_covAvg_fold_lengthLength
>scaffold_1_c1_cov61.3780_length417825
>scaffold_3_c1_cov45.0025_length77714
>scaffold_4_c1_cov84.2432_length70007
>scaffold_5_c2_cov57.6219_length67890
>scaffold_6_c1_cov331.1665_length65908
>scaffold_7_c1_cov138.5574_length64984
>scaffold_9_c1_cov77.1170_length59223
>scaffold_2_c2_cov51.1554_length55365
>scaffold_11_c1_cov44.1476_length53538
字符串
fasta文件中的每个scaffold当前的名称如下:
> scaffold_1_c1
型
我希望它们的名称与scaffold_mapping.txt文件相匹配,因此前面的示例将是:
> scaffold_1_c1_cov61.3780_length417825
型
我希望使用sed会很容易,但是">"使事情变得复杂
$ sed -f scaffold_mapping1.txt assembly.contigs.fasta > output1.fasta
sed: file scaffold_mapping1.txt line 1: unknown command: `>'
型
2条答案
按热度按时间omtl5h9j1#
这并不是说“>"使事情变得复杂”,你只是告诉sed去解释一个不包含sed脚本的文件。
这个问题还不清楚,但我可以告诉你这是OP想要的,使用任何POSIX awk:
字符串
它将输出发布的预期输出:
型
从发布的样本输入。
7qhs6swi2#
首先创建一个Map文件。使用任何脚本语言,如Perl。然后使用Map文件替换FASTA头:
字符串
out.fasta
的内容:型
Perl一行程序使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中查找。-p
:一次循环一行输入,默认情况下将其分配给$_
。每次循环迭代后添加print $_
。-l
:在执行代码之前去掉输入行分隔符(默认情况下,*NIX上为"\n"
),并在打印时附加它。BEGIN { ... }
:在运行其余代码之前执行代码,在这里,在解析fasta文件之前。%new = map { chomp; split; }
cat map.tsv;
:slurp整个Map文件,将结果存储在%new
哈希中。s{^>(\S+)}{>$new{$1}};
:使用%new
散列将fasta头(=以>
开头的行)从旧的用法更改为新的用法。$1
存储序列ID,即括号内捕获的任何内容。参见:
tail
perldoc perlrun
:如何执行Perl解释器:命令行开关perldoc perlre
: Perl regular expressions (regexes)的perldoc perlrequick
: Perl regular expressions quick start的