我在计算fasta文件的重叠群中的核苷酸。我的文件看起来像
>1
ATACCTACTA
ATTTACGTCA
GTA
>2
ATATTCGTAT
GTCTCGATCT
A
>3
等
我的命令是
awk '/^>/ {if (seqlen){print seqlen}; print ;seqlen=0; } { seqlen += length($0)}END{print seqlen}'
输出现在像
>1
23
>2
21
如何在同一行输出输出,例如
>1 23
>2 21
答案 0 :(得分:1)
更多的变化和瞧(感谢@Ed Morton):
awk '/^>/ {if(seqlen)print k,seqlen; seqlen=0; k=$0; next;} { seqlen += length($0);}END{print k,seqlen;}' filename
答案 1 :(得分:0)
这个适用于我:
awk '/^>/ && NR>1 {printf " %d \n", x; }/^>/{ printf "%s", $0 }!/^>/{ x += length($0) } file
我希望现在按预期工作。
答案 2 :(得分:0)
尝试:
awk '/^>/{printf("%s ",$0);getline;printf("%s\n",length($0))}' Input_file
检查线是否从>开始然后使用getline打印该行以跳转到下一行。用新行打印当前行的长度,然后提示输入文件。
修改强>
awk '/^>/{if(VAL){print Q OFS VAL;Q=VAL="";Q=$0;next};Q=$0;next} {VAL=VAL?VAL+length($0):length($0)} END{print Q,VAL}' Input_file
检查是否有任何以>开头的行然后检查VAL变量是否为非NULL然后打印变量Q和VAL的值然后取消然后Q,VAL变量和next将跳过所有进一步的语句,否则使Q为$ 0并使用next to skep进一步的语句。因此,创建一个名为VAL的变量,它将计算每一行的长度并添加它自己的值。在END部分中打印Q,VAL的值。