awk打印输出在同一行

时间:2017-05-17 09:20:47

标签: linux awk

我在计算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

3 个答案:

答案 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的值。