2011-09-08 72 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