【问题标题】:Find words in one file and grab the line they are in in another file: Bash script [duplicate]在一个文件中查找单词并获取它们在另一个文件中的行:Bash 脚本 [重复]
【发布时间】:2013-02-22 14:44:37
【问题描述】:

我正在尝试 grep 出文件中与在另一个文件中找到的单词相对应的所有行,然后创建第三个新文件,其中包含这些行。 例如:

File 1
rs2132k34hh
rs234hk5kk4
rsklhh32432

File 2
Info   more info   otherstuff     rs2132k34hh somethings
Info   more info   otherstuff    rs234hk5kk4  somethings
Info   more info   otherstuff     rsklhh32432 somethings
Info   more info   otherstuff    rs234hk5kk4  somethings

我觉得应该是这样的

 egrep -l "(\s(rs\S+))" /filethatIamsearching.txt > newfile.txt

从一个文件中grep一个rs并发送到新文件

但我知道这不是命令中应该包含的所有内容。 有人可以指出我正确的方向吗?

【问题讨论】:

    标签: linux bash file grep


    【解决方案1】:

    试试这个:

    grep -F -f file1 file2 >newfile.txt
    

    【讨论】:

    • 这似乎有效。您介意解释一下您推荐的 -F -f 命令吗?
    • -f 从文件 (file1) 中读取模式,-F 将模式视为固定字符串。 man grep 会给你更多信息。
    • 如果file2 中有一行包含foors234hk5kk4,这将不起作用。它将被错误地匹配。这就是为什么你需要-w 来匹配单词。
    • @dogbane grep 对此并非 100% 安全,您提供了解决方案,我总能找到异常。例如,keyString 不在第 4 列而是在第 3 列呢?回到你的-w。如果 file1 中有一行像.*,会发生什么?你看-F的必要性。或者也许 -F 和 -w 更好。 :)
    【解决方案2】:

    试试:

    grep -wf file1 file2 > file3
    

    您可以使用-f 选项告诉grep 从文件中读取模式。您也可以使用-w 选项仅搜索整个单词。

    【讨论】:

    • 这似乎不起作用。它继续运行,但没有任何内容被添加到新文件中。我让它运行了 7 或 8 分钟,但无济于事。
    • 为我工作。不确定您的问题是什么。
    • 文件很大会不会有问题?
    猜你喜欢
    • 2020-02-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2023-01-23
    相关资源
    最近更新 更多