GNU awk怪异与循环中的数组索引

时间:2019-03-23 21:24:02

标签: awk

我正在为一个问题(实际上是this one)起草一个简化的版本:

from flask import Flask, render_template
from Face_Detector import *

输出:

$ echo {a..g} | tr ' ' '\n' |  # create some data
  awk  -v s=e '{               # search string as an argument
      for(i=1;i<=2;i++)        # keep 2 last records in a
          a[i]=a[i+1]          # this is the problematic part later
      a[3]=$1                  # hash the current record into a
  }
  $1==s {                      # once there is a match
      for(i=1;i<=3;i++)        # output from the hash
          print a[i]
  }'

作为我,我不得不尝试使其长度缩短几个字节(从c d e i++-> for中删除a[i+1]

a[++i]

但是在GNU awk上输出失败:

    

e

过了一会儿,我开始换用mawk,它奏效了。它也可以在Busybox awk上运行,但是在awk-20121220上失败。知道导致该行为的原因是什么?另外,如果您对标题有更多描述性的想法,请随时进行更改。

1 个答案:

答案 0 :(得分:3)

来自GNU Awk User's Guide

  

具体取决于哪个表达式首先被评估(左手还是右手)的实现。请考虑以下示例:

i = 1
a[i += 2] = i + 1
     

a[3]的值可以是2或4。