FN=DNP { ignore } FN=X(*) { $=$1 } /* iteration demo */ FOO=abcde BAR=x /* BAR= wouldn't be syntactically correct. We need a non-empty value */ FOO=(*)(?) { BAR=$BAR$2 FOO=$1 continue } BAR=x(*) { $=$1 } /* remove the "x" */ REF=R[0-9]* { T=R VAL=(#R) { R=$1 } TOL <= 5% FN=*% { TOL<=$$ } break REF // end break continue ignore } /* pattern: () | like in RE * ? like in glob (#U) expect a numeric value of unit U (use substring to get canonical value) subst: $1 ... $field substring: $1, $2, ... variable: $foo, ... with curly braces: ${foo}, ... input variable (in pattern): $$ the input variable ($) can also be used as LHS for matches, assignments, and as break/continue target. Caveat: Wrong: FN=* { X=$FN } there is no variable called FN Right: FN=* { X=$$ } yields the Fn field selected by FN Wrong: VAL=(#R) { R=$VAL } yields literal value Wrong: VAL=(#R) { R=$$ } yields literal value Right: VAL=(#R) { R=$1 } yield canonicalized value */