AWK:有没有办法检查下一个记录的数字?

时间:2015-03-13 23:35:39

标签: bash awk

我有我试图操纵的数据。我们不想操纵的唯一数据是开始和结束。开始很容易,因为开始总是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值,我希望最后一个值不会改变。

1 个答案:

答案 0 :(得分:3)

awk看起来不是提前,但你总是可以创建一个存储前一条记录的变量,并安排写那个而不是当前记录。 END部分会整理一下。