bash – 比较两个greps的输出
发布时间:2020-12-16 01:50:48 所属栏目:安全 来源:网络整理
导读:我有两个带有大量定义的C源文件,我想将它们相互比较并过滤掉不匹配的行. 第一个文件的grep(grep NO_BCM_ include / soc / mcm / allenum.h | grep -v 56440)输出可能如下所示: ......# if !defined(NO_BCM_5675_A0)# if !defined(NO_BCM_88660_A0)# if !def
我有两个带有大量定义的C源文件,我想将它们相互比较并过滤掉不匹配的行.
第一个文件的grep(grep NO_BCM_ include / soc / mcm / allenum.h | grep -v 56440)输出可能如下所示: ... ... # if !defined(NO_BCM_5675_A0) # if !defined(NO_BCM_88660_A0) # if !defined(NO_BCM_2801PM_A0) ... ... 其中grep(grep“定义NO_BCM”包括/ sdk_custom_config.h)的第二个看起来像: ... ... #define NO_BCM_56260_B0 #define NO_BCM_5675_A0 #define NO_BCM_56160_A0 ... ... 所以现在我想在上面的大括号中找到下面#define中缺少的任何类型编号.我最好怎么做? 解决方法
您可以使用带有两个进程替换处理程序的awk逻辑用于grep
awk 'FNR==NR{seen[$2]; next}!($2 in seen)' FS=" " <(grep "define NO_BCM" include/sdk_custom_config.h) FS="[()]" <(grep NO_BCM_ include/soc/mcm/allenum.h | grep -v 56440) # if !defined(NO_BCM_88660_A0) # if !defined(NO_BCM_2801PM_A0) 想法是<()中的命令将根据需要执行并生成输出.在输出之前使用FS是为了确保使用适当的分隔符来解析公共实体. FS =“[()]”是捕获$2作为第二组中的唯一字段,FS =“”用于第一组的默认空白限制. awk的核心逻辑是识别不重复的元素,即FNR == NR将存储$2中的唯一条目的第一组解析为散列映射.一旦解析了所有行,就会在第二组上执行!(看到$2),这意味着过滤那些第二组中的$2在创建的哈希中不存在的行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |