我有我试图操纵的数据。我们不想操纵的唯一数据是开始和结束。开始很容易,因为开始总是exon_1。结尾并不总是exon_12或其他什么,它会有所不同。
我的问题是,AWK是否有办法存储下一条记录而不进入下一条记录?我想解决这个问题的方法是检查下一条记录是否为exon_1,如果是,则不要在第5列末尾添加+1和+2
顺便说一下,我正在用bash脚本编码。脚本所做的其他事情与问题无关。
我到目前为止的代码:
awk '{ if ($9~"exon_1;") {$3 = $3 FS "0"; $3 = $3 FS "0"; print $0 } else {$4 = $4-1 FS $4; $4 = $4-1 FS $4; print $0}}' exons.gff3 > exons2.gff3
awk '{ {$7 = $7 FS $7+1; $7 = $7 FS $7+2; print $0}}' exons2.gff3 > exons3.gff3
我正在考虑的代码,但无法安静实施:
awk '{ if ($9~"exon_1;") {$3 = $3 FS "0"; $3 = $3 FS "0"; print $0 } else {$4 = $4-1 FS $4; $4 = $4-1 FS $4; print $0}}' exons.gff3 > exons2.gff3
awk 'BEGIN {NR+1 = a} { if (a's $11~"exon_1;") {$7 = $7 FS "0"; $7 = $7 FS "0"; print $0} {$7 = $7 FS $7+1; $7 = $7 FS $7+2; print $0}}' exons2.gff3 > exons3.gff3
输入:
Chr1 MSU_osa1r7 exon 2903 3268 . + . ID=LOC_Os01g01010.1:exon_1;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 3354 3616 . + . ID=LOC_Os01g01010.1:exon_2;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 4357 4455 . + . ID=LOC_Os01g01010.1:exon_3;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 5457 5560 . + . ID=LOC_Os01g01010.1:exon_4;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 7136 7944 . + . ID=LOC_Os01g01010.1:exon_5;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 8028 8150 . + . ID=LOC_Os01g01010.1:exon_6;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 8232 8320 . + . ID=LOC_Os01g01010.1:exon_7;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 8408 8608 . + . ID=LOC_Os01g01010.1:exon_8;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 9210 9617 . + . ID=LOC_Os01g01010.1:exon_9;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 10104 10187 . + . ID=LOC_Os01g01010.1:exon_10;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 10274 10430 . + . ID=LOC_Os01g01010.1:exon_11;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 10504 10817 . + . ID=LOC_Os01g01010.1:exon_12;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 422527 422748 . + . ID=LOC_Os01g01800.1:exon_1;Parent=LOC_Os01g01800.1
Chr1 MSU_osa1r7 exon 422910 422972 . + . ID=LOC_Os01g01800.1:exon_2;Parent=LOC_Os01g01800.1
Chr1 MSU_osa1r7 exon 423069 423379 . + . ID=LOC_Os01g01800.1:exon_3;Parent=LOC_Os01g01800.1
Chr1 MSU_osa1r7 exon 423524 423620 . + . ID=LOC_Os01g01800.1:exon_4;Parent=LOC_Os01g01800.1
Chr1 MSU_osa1r7 exon 423697 423774 . + . ID=LOC_Os01g01800.1:exon_5;Parent=LOC_Os01g01800.1
Chr1 MSU_osa1r7 exon 423871 423930 . + . ID=LOC_Os01g01800.1:exon_6;Parent=LOC_Os01g01800.1
(忽略它变为空格分隔,我稍后会修复它。我只是复制了我的代码现在生成的内容并添加了我想要它做的最后一个外显子_。)
输出:
Chr1 MSU_osa1r7 exon 0 0 2903 3268 3269 3270 . + . ID=LOC_Os01g01010.1:exon_1;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 3352 3353 3354 3616 3617 3618 . + . ID=LOC_Os01g01010.1:exon_2;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 4355 4356 4357 4455 4456 4457 . + . ID=LOC_Os01g01010.1:exon_3;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 5455 5456 5457 5560 5561 5562 . + . ID=LOC_Os01g01010.1:exon_4;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 7134 7135 7136 7944 7945 7946 . + . ID=LOC_Os01g01010.1:exon_5;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 8026 8027 8028 8150 8151 8152 . + . ID=LOC_Os01g01010.1:exon_6;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 8230 8231 8232 8320 8321 8322 . + . ID=LOC_Os01g01010.1:exon_7;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 8406 8407 8408 8608 8609 8610 . + . ID=LOC_Os01g01010.1:exon_8;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 9208 9209 9210 9617 9618 9619 . + . ID=LOC_Os01g01010.1:exon_9;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 10102 10103 10104 10187 10188 10189 . + . ID=LOC_Os01g01010.1:exon_10;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 10272 10273 10274 10430 10431 10432 . + . ID=LOC_Os01g01010.1:exon_11;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 10502 10503 10504 10817 0 0 . + . ID=LOC_Os01g01010.1:exon_12;Parent=LOC_Os01g01010.1
Chr1 MSU_osa1r7 exon 0 0 2984 3255 3256 3257 . + . ID=LOC_Os01g01010.2:exon_1;Parent=LOC_Os01g01010.2
Chr1 MSU_osa1r7 exon 3352 3353 3354 3616 3617 3618 . + . ID=LOC_Os01g01010.2:exon_2;Parent=LOC_Os01g01010.2
Chr1 MSU_osa1r7 exon 4355 4356 4357 4455 4456 4457 . + . ID=LOC_Os01g01010.2:exon_3;Parent=LOC_Os01g01010.2
Chr1 MSU_osa1r7 exon 5455 5456 5457 5560 5561 5562 . + . ID=LOC_Os01g01010.2:exon_4;Parent=LOC_Os01g01010.2
Chr1 MSU_osa1r7 exon 7134 7135 7136 7944 7945 7946 . + . ID=LOC_Os01g01010.2:exon_5;Parent=LOC_Os01g01010.2
Chr1 MSU_osa1r7 exon 8026 8027 8028 8150 0 0 . + . ID=LOC_Os01g01010.2:exon_6;Parent=LOC_Os01g01010.2
你所看到的是最后一个exon_没有在它旁边添加+1和+2值,我希望最后一个值不会改变。
答案 0 :(得分:3)
awk看起来不是提前,但你总是可以创建一个存储前一条记录的变量,并安排写那个而不是当前记录。 END
部分会整理一下。