【问题标题】:Grep a file containing strings from another filegrep 包含来自另一个文件的字符串的文件
【发布时间】:2014-06-14 12:15:41
【问题描述】:

我在 linux pc 中有两个文件 X1 和 X2,一个文件 (X1) 包含 10000 个唯一 ID(如 1001、5287、6589)另一个文件 (X2) 在特定位置包含包含任何这些 ID 的行让我们说每行中的位置 125 到 128。 现在我想grep包含第一个文件(X1)的ID的第二个文件(X2)的行并将其写入另一个文件(X3)。为此,我需要任何 awk 命令或 perl 脚本。 我想在 X2 的 125 到 128 位置而不是在 X2 的其他位置 grep 那些具有 X1 id 的 X2 行。

【问题讨论】:

  • 必须是awk还是perl?这似乎有点矫枉过正。

标签: linux awk grep


【解决方案1】:

grep 允许从文件中读取搜索表达式,所以你可以使用这个:

grep -f X1 X2 > X3

要将匹配限制在位置 125,您可以添加一个匹配前 124 个字符的模式,即^.{124}。您可以使用例如sed 来创建修改后的模式文件:

sed -e 's/^/^.{124}/' X1 > X1.patterns
grep -E -f X1.patterns X2 > X3

【讨论】:

    【解决方案2】:
    for id in 'cat x1'; do grep $id x2; done > x3
    

    【讨论】:

    • 我的 iTouch 不会在 cat x1 周围做反引号。
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多