2012-06-20 71 views
2

您能否幫我解決以下語法錯誤?當我在「如果」之後有一個聲明時,該程序起作用。但是當我在「if」之後想要兩個語句時,我會遇到錯誤。感謝, 卡爾。awk if - if後面的語句

BEGIN { FS = 「,」 } 
{ if ($2 == 「」 && ($6 == 「Install」 || $6 == 「Add」 || $6 == 「New」)) 
{ 
print $1″,」$2″,」$3″,」$4″,」$5″,」$6″,」$7″,」$8″,」$9 > 「Email_Asset_Add」 ; 
print 「$8″,」$9 > 「Email_Asset_Add_Mitul」 ; 
} 
else if ($2 == 「」 && ($6 == 「Change」 || $6 == 「Update」 || $6 == 「Existing」)) 
{ 
print $1″,」$2″,」$3″,」$4″,」$5″,」$6″,」$7″,」$8″,」$9 > 「Email_Asset_Update」 ; 
print 「$8″,」$9 > 「Email_Asset_Update_Mitul」 ; 
} 
} 

的awk -f awk_program test_email AWK:換行字符串近線23 AWK:換行字符串近線28

+0

我覺得你的問題是在這裏打印$ 1「:這是打印「$ 1」,它不是唯一未閉弦,但我不知道AWK,所以我不知道是否只有一個報價是正確的。 –

+0

就是這樣(連同9美元之後的失蹤)。謝謝! – user1469609

+0

你的引用不一致,'print'需要逗號分隔列表。嘗試'打印$ 1,「,」,$ 2,「,」,...'或'printf「%s,%s,%s \ n」,$ 1,$ 2,$ 3'。 – twalberg

回答

2

我建議使用printf()簡化你的代碼。

例如,這樣的:

print $1」,」$2」,」$3」,」$4」,」$5」,」$6」,」$7」,」$8」,」$9 > 「Email_Asset_Add」 ; 

可能成爲這樣的:

printf("%s,%s,%s,%s,%s,%s,%s,%s,%s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9) > 「Email_Asset_Add」; 

更容易看到的東西是這樣的。

事實上,整個事情可以用一點重構的事:

BEGIN { 
    FS = 「,」; 
} 

{ 
    if ($2 == 「」 && ($6 == 「Install」 || $6 == 「Add」 || $6 == 「New」)) { 
    output="Email_Asset_Add"; 
    } else 
    if ($2 == 「」 && ($6 == 「Change」 || $6 == 「Update」 || $6 == 「Existing」)) { 
    output="Email_Asset_Update"; 
    } else { 
    next; 
    } 
    printf("%s,%s,%s,%s,%s,%s,%s,%s,%s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9) > output; 
    printf("%s,%s\n", $8,$9); > 「Email_Asset_Update_Mitul」 ; 
} 
+0

Downvote無評論?這個答案如何不正確或誤導? – ghoti