-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;
}
}
任何人都可以帮助找到任何错误,如果有一个?我可以弄清楚为什么它没有得到。 谢谢。
感谢您的回复。我删除了分号,并将'=='更改为'&&'。这次我得到了一些答案,但不是我想要的。我希望单独使用数组“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
如果你想删除该行,你为什么要打印它? –
打印只是想确认它正在选择应该删除的行。 (我是编程中的新手)。谢谢 – Vijay