2011-11-19 49 views
1

我已經看到這個awk代碼的幾個變種(人們已經重寫它來顯示他們自己的電子郵件地址),我不明白這裏發生了什麼。有人可以爲我分解它嗎(也許是一個小例子)嗎?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}' 

輸出;

[email protected] 

回答

4

大部分的魔法在於printf語句。這是從AWK手冊頁:

的printf語句和sprintf()函數的AWK版本(見下文)接受 下面的轉換規範格式:

%c
的ASCII字符。如果用於 %c的參數是數字,則將 視爲字符並進行打印。否則,參數被假定爲 字符串,並且只打印該字符串的第一個字符。
+0

非常感謝您爲我指出正確的方向!那是我需要的微調,我現在寫了自己的:D – jwbensley