gpt4 book ai didi

bash - 比较两个 greps 的输出

转载 作者:行者123 更新时间:2023-11-29 09:17:01 25 4
gpt4 key购买 nike

我有两个包含大量定义的 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 "define NO_BCM"include/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的用法在输出之前确保使用适当的定界符解析公共(public)实体。

FS="[()]"是捕获$2作为第二组中的唯一字段和FS=" "对于第一组的默认空格去限制。

awk的核心逻辑正在识别不重复的元素,即 FNR==NR解析存储在 $2 中的唯一条目的第一组作为 HashMap 。解析完所有行后,!($2 in seen)在第二组上执行,这意味着过滤那些 $2 的行来自第二组的不存在于创建的散列中。

关于bash - 比较两个 greps 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com