AWK初学者,这段代码会发生什么?

时间:2011-11-19 15:33:58

标签: awk signature

我已经看到了这个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

1 个答案:

答案 0 :(得分:4)

大部分神奇之处在于printf语句。这是来自awk手册页:

  

printf语句的AWK版本和sprintf()函数(见下文)接受   以下转换规范格式:

     
  
%c
  
  ASCII字符。如果用于%c的参数是数字,则为   被视为一个角色并打印出来。否则,该参数被假定为a   字符串,只打印该字符串的第一个字符。