For example, write the third field of every record (if the field exists) into `file.{recnum}`:
(awk ([f 2] (-> `file.@nr` (prn [f 2]))))
The manual contains a translation of all of the Awk examples from the POSIX standard:http://www.nongnu.org/txr/txr-manpage.html#N-03D16283
The (-> name form ...) syntax above is scoped to the surrounding awk macro. Like in Awk, the redirection is identified by string. If multiple such expressions appear with the same name, they denote the same stream (within the lexical scope of the awk macro instance to which they belong). These are implicitly kept in a hash table. When the macro terminates (normally or via non-local jump like an exception), these streams are all closed.
core.async https://github.com/clojure/core.async
core.match https://github.com/clojure/core.match
Compojure https://github.com/weavejester/compojure
Midje https://github.com/marick/Midje
Korma http://sqlkorma.com/
Function calls in Clojure doesn't match with the definition of what's in my head here. This is sort of what I was getting at in my original comment.
Common Lisp makes it easy to compose DSLs so it was trivial to apply the URL checking DSL to the JavaScript generating DSL (Parenscript) and have the browser-side code checked at compile time as well.
Another good example is CLiki2: https://github.com/vsedach/cliki2/blob/master/src/readtable....
The HTML template system is a small DSL on top of a string interpolation library (vs a 10,000 line templating library that can't even get HTML attributes right). It was also trivial to make it use streams to eliminate string allocation/copying.