【问题标题】:egrep -v match lines containing some same text on each lineegrep -v 匹配每行包含相同文本的行
【发布时间】:2015-11-12 20:39:51
【问题描述】:

所以我有两个文件。

文件 1 内容示例。

/n01/mysqldata1/mysql-bin.000001
/n01/mysqldata1/mysql-bin.000002
/n01/mysqldata1/mysql-bin.000003
/n01/mysqldata1/mysql-bin.000004
/n01/mysqldata1/mysql-bin.000005
/n01/mysqldata1/mysql-bin.000006

文件 2 内容示例。

/n01/mysqlarch1/mysql-bin.000004
/n01/mysqlarch1/mysql-bin.000001
/n01/mysqlarch2/mysql-bin.000005

所以我只想根据 mysql-bin.00000X 而不是每个文件中的其余文件路径进行匹配,因为它们在 file1 和 file2 之间有所不同。

这是我要运行的命令

cat file1 | egrep -v file2

我希望这里的输出是......

/n01/mysqldata1/mysql-bin.000002
/n01/mysqldata1/mysql-bin.000003
/n01/mysqldata1/mysql-bin.000006

任何帮助将不胜感激。

【问题讨论】:

    标签: bash grep pattern-matching string-matching


    【解决方案1】:

    只需根据/ 的所有内容进行比较:

    $ awk -F/ 'FNR==NR {a[$NF]; next} !($NF in a)' f2 f1
    /n01/mysqldata1/mysql-bin.000002
    /n01/mysqldata1/mysql-bin.000003
    /n01/mysqldata1/mysql-bin.000006
    

    说明

    这会读取内存中的file2,然后与file1进行比较。

    • -F/ 将字段分隔符设置为/
    • FNR==NR {a[$NF]; next} 在读取第一个文件 (file2) 时,将最后一段存储到数组 a[] 中。由于我们将字段分隔符设置为/,因此这是mysql-bin.00000X 部分。
    • !($NF in a) 在读取第二个文件 (file1) 时检查最后一个字段 (mysql-bin.00000X 部分) 是否在数组 a[] 中。如果没有,请打印该行。

    我在测试时发现了一个问题。如果文件 2 是 空的什么都没有返回,正如我所期望的每一行 在要返回的 file1 中。这是你能帮我的吗 请? – 用户 2841861。

    那么问题是FNR==NR在读取第二个文件时匹配。为了防止这种情况,只需交叉检查“读入[]数组”操作是否在第一个文件上完成:

    awk -F/ 'FNR==NR && argv[1]==FILENAME {a[$NF]; next} !($NF in a)' f2 f1
                     ^^^^^^^^^^^^^^^^^^^^
    

    来自man awk

    ARGV

    awk 程序可用的命令行参数存储在一个 数组称为 ARGV。 ARGC 是命令行参数的数量 展示。请参阅其他命令行参数部分。不像大多数awk 数组,ARGV 从零索引到 ARGC - 1

    【讨论】:

    • 非常感谢您的回答。我在测试时发现了一个问题。如果 file2 为空,则根本不会返回任何内容,正如我期望返回的 file1 中的每一行一样。请问您有什么可以帮我的吗?
    • 很高兴读到 :) 请记住,如果它有帮助并解决了问题,您可以接受答案
    • 我很乐意这样做。你能帮忙看看我发现的一个问题吗?
    • @user2841861 嗯,告诉我
    • 我在测试时发现了一个问题。如果 file2 为空,则根本不会返回任何内容,正如我期望返回的 file1 中的每一行一样。请问您有什么可以帮我的吗?
    猜你喜欢
    • 2018-04-07
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2021-05-14
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多