我已经看到了这个awk代码的几种变体(人们重新编写它来显示自己的电子邮件地址),我无法理解这里发生了什么。有人可以为我分解(也许是一个较小的例子)吗?
http://www.gnu.org/s/gawk/manual/html_node/Signature-Program.html
代码;
awk 'BEGIN{O="~"~"~";o="=="=="==";o+=+o;x=O""O;while(X++<=x+o+o)c=c"%c";
printf c,(x-O)*(x-O),x*(x-o)-o,x*(x-O)+x-O-o,+x*(x-O)-x+o,X*(o*o+O)+x-O,
X*(X-x)-o*o,(x+X)*o*o+o,x*(X-x)-O-O,x-O+(O+o+X+x)*(o+O),X*X-X*(x-O)-x+O,
O+X*(o*(o+O)+O),+x+O+X*o,x*(x-o),(o+X+x)*o*o-(x-O-O),O+(X-x)*(X+O),x-O}'
输出;
dave_br@gmx.com
答案 0 :(得分:4)
大部分神奇之处在于printf语句。这是来自awk手册页:
printf语句的AWK版本和sprintf()函数(见下文)接受 以下转换规范格式:
%c
- ASCII字符。如果用于
%c
的参数是数字,则为 被视为一个角色并打印出来。否则,该参数被假定为a 字符串,只打印该字符串的第一个字符。