2011-09-08 75 views
-3

這也是繼之前的討論:(deleting selected lines from data file刪除選定的行

我試圖遵循Fredirk和格倫·傑克曼解決的想法,我下面僅打印線出來的代碼如果這對數字匹配特定的證件。

當我執行代碼時,會有輸出,但它會打印所有行而不是特定的行。

#!/usr/bin/awk -f 

BEGIN { 
    i=0 
    for (n=1; n<=8; n++) set[i++] = n; 
    for (n=57; n<=64; n++) set[i++] = n; 
    for (n=9; n<=49; n+=8) {set[i++] = n; set[i++] = n+7}; 
    } 


/^|/{ 
    split($3, res1, "@"); split($6, res2, "@"); #print res1[1], res2[1] 

    if ((res1[1] in set) == (res2[1] in set)); 

    { 
     print; 
     next; 

    } 

} 

任何人都可以幫助找到任何錯誤,如果有一個?我可以弄清楚爲什麼它沒有得到。 謝謝。

回答

1

if命令後面有一個雜散分號。如果條件成立,你什麼都不做。然後你打印每一行。

+0

感謝您的回覆。我刪除了分號,並將'=='更改爲'&&'。這次我得到了一些答案,但不是我想要的。我希望單獨使用數組「set」中的兩個數字(res1 [1]和res2 [1]),並且如果發生這種情況,那麼該特定行將被刪除。我給你的代碼考慮。謝謝。 (n = 1; n <= 8; n ++)set [i ++] = n;#!/ usr/bin/awk -f BEGIN \t { i = 0 對於(n = 57; n <= 64; n ++)組[i ++] = n,爲 。對於(n = 9;n≤49; n + = 8){set [i ++] = n; set [i ++] = n + 7}; ($ 1 ==「|」){ split($ 3,res1,「@」);} 分割($ 6,res2,「@」); ((res1 [1] in set)&&(res2 [1] in set)) {print;下一個; } } – Vijay

+0

如果你想刪除該行,你爲什麼要打印它? –

+0

打印只是想確認它正在選擇應該刪除的行。 (我是編程中的新手)。謝謝 – Vijay