繁体   English   中英

AWK:有没有办法检查下一个记录的号码?

[英]AWK: is there a way to check the next record for a number?

我有要处理的数据。 我们不想操纵的唯一数据是开始和结束。 开头很容易,因为开头始终是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

(忽略它更改为空格分隔,稍后再解决。我只是复制了代码现在产生的内容,并将我想做的事情添加到最后一个exon_中。)

输出:

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值,我希望最后一个值不改变。

awk不向前看 ,但你总是可以创建存储先前记录的变量,并安排来编写 ,而不是当前的记录。 END部分会整理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM