Parsing 替换“的每个实例”&燃气轮机&引用;加上&燃气轮机;{InstanceNumber}”;

Parsing 替换“的每个实例”&燃气轮机&引用;加上&燃气轮机;{InstanceNumber}”;,parsing,awk,sed,Parsing,Awk,Sed,快速浏览.fasta文件的背景,每隔一行从第一行开始,以开头,然后是标题名。文件中没有其他地方可以找到。由于有时合并2个fasta文件会导致非唯一的头名称,所以我需要一个简单的脚本,使每个头名称都是唯一的 我有: for i in {1..4013}; do awk '/>/{c++;if(c=='"$i"'){sub(">",">'"$i"'_")}}1' Combined_Pass_2D_nanocorrect_round1_renamed.fasta > tmp.f

快速浏览
.fasta
文件的背景,每隔一行从第一行开始,以
开头,然后是标题名。文件中没有其他地方可以找到
。由于有时合并2个fasta文件会导致非唯一的头名称,所以我需要一个简单的脚本,使每个头名称都是唯一的

我有:

for i in {1..4013}; do awk '/>/{c++;if(c=='"$i"'){sub(">",">'"$i"'_")}}1' Combined_Pass_2D_nanocorrect_round1_renamed.fasta > tmp.fasta; \ 
rm -rf Combined_Pass_2D_nanocorrect_round1_renamed.fasta; \ 
mv tmp.fasta Combined_Pass_2D_nanocorrect_round1_renamed.fasta; done
你可能猜到这需要很长时间,但它确实起到了作用。我使用
grep-c
查找标题的数量,并确定它是4013


有没有更快捷的方法?

您的方法会针对每一次替换,遍历整个fasta文件。对于这样的输入文件:

>header
ATGC
>another header
TACG
>and still another header
ATCG
您可以直接使用awk:

$ awk '/^>/{sub(/^>/, sprintf(">%04d_", ++i))}1' infile.fasta
>0001_header
ATGC
>0002_another header
TACG
>0003_and still another header
ATCG
我给这个数字加了零填充。如果您不想这样做,您必须从
sprintf
语句中删除
04


此命令只检查一行是否以
开头,如果以
开头,则会增加一个计数器,将其附加到
中,添加一个下划线并打印该行(命令末尾的一行
1
)。

每次替换,您的方法都会遍历整个fasta文件。对于这样的输入文件:

>header
ATGC
>another header
TACG
>and still another header
ATCG
您可以直接使用awk:

$ awk '/^>/{sub(/^>/, sprintf(">%04d_", ++i))}1' infile.fasta
>0001_header
ATGC
>0002_another header
TACG
>0003_and still another header
ATCG
我给这个数字加了零填充。如果您不想这样做,您必须从
sprintf
语句中删除
04


此命令仅检查一行是否以
开头,如果以
开头,则增加一个计数器,将其附加到
中,添加下划线并打印该行(命令末尾的一行
1

是否可以添加相同的示例行,它们在转换之前是什么样子,以及转换之后应该是什么样子?每次编写shell循环只是为了操纵文本时,您的方法都是错误的。请看。您是否可以添加相同的示例行,它们在转换前的外观以及转换后的外观?每次编写shell循环只是为了处理文本时,您的方法都是错误的。看见