Awk in Lisp as a macro with Lisp AST syntax:<p><a href="http://nongnu.org/txr/txr-manpage.html#N-000264BC" rel="nofollow">http://nongnu.org/txr/txr-manpage.html#N-000264BC</a><p>* Implements almost all salient POSIX features and some Gawk extensions.<p>* <i>awk</i> expression can be used anywhere an expression is allowed, including nested within another <i>awk</i> invocation. Awk variables are lexically scoped locals: each invocation has its <i>nf</i>, <i>fs</i>, <i>rec</i> and others.<p>* <i>awk</i> expression returns a useful value: the value of the last form in the last :end clause.<p>* can scan sources other than files, such as in-memory string streams, strings and lists of strings.<p>* supports regex-delimited record mode, and can optionally keep the record separator as part of the record (via "krs" Boolean variable).<p>* unlike Awk, range expressions freely combine with other expressions including other range expression.<p>* ranges are extended with semantic 8 variations, for succinctly expressing range-based situations that would require one or more state flags and convoluted logic in Awk: <a href="http://nongnu.org/txr/txr-manpage.html#N-000264BC" rel="nofollow">http://nongnu.org/txr/txr-manpage.html#N-000264BC</a><p>* strongly typed: no duck-typed nonsense of "1.23" being a number or string depending on how you use it. Only <i>nil</i> is false.<p>Recently accepted Unix Stackexchange answer featuring awk macro: <a href="https://unix.stackexchange.com/questions/316664/change-specific-part-of-file-via-a-shell-script/316752#316752" rel="nofollow">https://unix.stackexchange.com/questions/316664/change-speci...</a>