【问题标题】:compare 2 files and show only lines with partial matches比较 2 个文件并仅显示部分匹配的行
【发布时间】:2025-12-08 05:25:01
【问题描述】:

文件 #1 示例:

one two three 
four five six 
seven eight nine
eleven 

文件 #2 示例:

 two
 five
 nine.not
 eleven

我想在文件 #1 中找到 any 行,其中包含文件 #2 中存在的任何单词,例如输出:

one two three
four five six 
eleven

我试图查看是否有办法在 linux 命令行中执行此操作,但尚未成功。有什么想法吗?

谢谢

【问题讨论】:

    标签: linux bash command-line


    【解决方案1】:

    你可以试试:

    grep -f file2 file1
    

    -f 选项从 file2 获取模式(每行一个)

    编辑

    @Barmar 评论

    grep -F -w -f file2 file1
    

    使用 -w 选项,不会选择像 eleveneleven 这样的行

    【讨论】:

    • 使用-F 选项执行精确匹配而不是正则表达式,使用-w 匹配整个单词。
    【解决方案2】:

    你可以使用这个 awk 命令:

    awk 'FNR==NR{a[$1]; next} {for (i in a) if (index($0, i)) print}' file2 file1
    one two three
    four five six
    eleven
    

    【讨论】:

      最近更新 更多