Awk 如何从文件中使用排除模式

Awk 如何从文件中使用排除模式,awk,Awk,我想使用awk在多个文件中搜索模式,但从文件中排除一些模式 这是我尝试过的代码 BEGIN { print "Begin Processing of various Records"} /Type.*ABC/ {a=1} /999/{a=0; if (a==1) print a;} END { print "Process Complete" } 示例: 这是文件示例 Resources: CODE: Type: "ABC::DEF::AVC" Type: "ABC::DE

我想使用awk在多个文件中搜索模式,但从文件中排除一些模式

这是我尝试过的代码

BEGIN { print "Begin Processing of various Records"}
/Type.*ABC/ {a=1} /999/{a=0; if (a==1) print a;}
END { print "Process Complete" }
示例:

这是文件示例

Resources:
  CODE:
    Type: "ABC::DEF::AVC"
    Type: "ABC::DEF::999"
    Type: "ABC::DEF::ZZZ"
现在假设我有一个包含内容的文件排除

999
888
ZZZ

现在,我想显示具有匹配优先模式的所有行,但如果从排除中找到任何模式,则排除。

这就是您要尝试的吗

$ awk -F'[:"]' 'NR==FNR{a[$0];next} /Type.*ABC/ && !($(NF-1) in a)' excludes file
    Type: "ABC::DEF::AVC"

如果您的数据在“d”文件中,请尝试gnu awk:

awk '/Type.*ABC/ && $0 !~ /999|888|ZZZ/' d

a=0;如果(a==1),则打印a设置为0后检查
a
是否为1是无意义的,
a
将永远不会被打印。在这种情况下,grep更简单:
grep'类型。*ABC'示例| grep-v-F-F排除
,只有
0
1
的值将由
打印a
,而不是扫描行上的值。祝您好运。@Sheller我可以在检查a后在结束块中打印$0吗?我相信您可以,但是
$0
将只具有脚本处理的最后一行的值。我记得一些版本的
awk
在其
END
块的作用域中没有
$0
,但我可能错了,或者将其与
BEGIN
混淆了。。。。在脚本主体中,如果(a)打印$0,则可以执行
a=0上面提到的事情必须处理。虽然我喜欢awk,但根据我的经验,我认为dbl-
grep
-v-F-F
是解决您所述问题的方法。祝你好运