Awk 如何从文件中使用排除模式
我想使用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
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
是解决您所述问题的方法。祝你好运