如何从一个文件中提取包含另一个文件中的单词列表的行?

如何从一个文件中提取包含另一个文件中的单词列表的行?

我已经尝试了该网站上的所有建议,但输出不完整。

文件 1 显示了我想在文件 2 中搜索的蛋白质列表,并提取包含我需要的信息的完整行集。

Q14157
Q14444
P23246
Q96EP5
Q9UN86
Q14011
Q7Z739
Q9Y383
Q96I24
Q9NP61
P29558
P51116
P00441
Q2TBT7
Q9NZI8

文件 2 包含(本部分此处粘贴不完整)要从文件 1 的列表中提取的信息。

P21796  260 Phosphoserine   S   1
P21796  266 N6-acetyllysine K   4
P21796  266 Ubiquitination  K   3
P21796  274 N6-acetyllysine K   1
P21796  274 Ubiquitination  K   3
P18848  45  Sumoylation K   1
P18848  45  Ubiquitination  K   2
P18848  53  Sumoylation K   1
P18848  55  Ubiquitination  K   2
P18848  69  Phosphoserine   S   4
P18848  75  Ubiquitination  K   2
P18848  88  Ubiquitination  K   2
P18848  107 Phosphothreonine    T   1
P18848  114 Phosphothreonine    T   1
P18848  115 Phosphothreonine    T   1
P18848  119 Phosphothreonine    T   1
P18848  213 Phosphothreonine    T   1
P18848  215 Phosphoserine   S   1
P18848  219 Phosphoserine   S   4
P18848  224 Phosphoserine   S   3
P18848  231 Phosphoserine   S   1
P18848  235 Phosphoserine   S   1
P18848  245 Phosphoserine   S   3
P18848  248 Phosphoserine   S   3
P18848  267 Sumoylation K   1
P18848  277 Ubiquitination  K   1
P18848  293 Phosphothreonine    T   1
P18848  295 Phosphotyrosine Y   1
P18848  335 Ubiquitination  K   2
P18848  343 N6-acetyllysine K   1
P18848  348 N6-acetyllysine K   1
P23246  7   Dimethylation   R   1
P23246  7   Omega-N-methylarginine  R   2
P23246  8   Phosphoserine   S   3
P23246  9   Asymmetric dimethylarginine R   1
P23246  9   Dimethylation   R   1
P23246  9   Methylation R   1
P23246  9   Omega-N-methylarginine  R   3
P23246  19  Dimethylation   R   1
P23246  19  Methylation R   1
P23246  19  Omega-N-methylarginine  R   2
P23246  25  Dimethylation   R   1
P23246  25  Methylation R   1
P23246  25  Omega-N-methylarginine  R   2
P23246  32  Dimethylation   R   1
P23246  32  Methylation R   1
P23246  33  Phosphoserine   S   8
Q14011  17  Phosphothreonine    T   1
Q14011  21  Phosphoserine   S   1
Q14011  33  Phosphoserine   S   1
Q14011  47  Methylation R   1
Q14011  71  Phosphoserine   S   3
Q14011  84  Ubiquitination  K   2
Q14011  94  Dimethylation   R   1

答案1

grep -f file1 file2应该搜索file2所有模式file1并打印匹配的行。 (不过,如果在任何地方都匹配,那么如果蛋白质名称以某种方式出现在第一列之后,这可能会产生误报。)由于您想要匹配固定字符串,您还可以添加-F.

答案2

解决此问题的一种方法是转义 file1 中的所有正则表达式字符,并在下一步中从两端限制字符串。请注意,步骤的顺序是重要的。

这可以称为一种hybrid regex方法,其中要匹配的实际字符串将其所有正则表达式 BRE 字符转义,以便它成为文字字符串,同时在外围我们放置正则表达式字符以将匹配限制为第一个字段。

$ < file1 \
    sed -e '
      s:[[\.*^$]:\\&:g
      s/.*/^&[[:blank:]]/
'  | grep -f - file2

*Step-1 => 使用 BRE 表达式将 file1 中的字符串呈现为与 grep 相对应的纯字符串。

*Step-2 => 将上述转义字符串左侧限制为行首,右侧限制为空白字符。

  • 小鬼注意:我们正在转义 BRE 正则表达式字符。所以不要调用grepwith -E

答案3

您可以使用下面的 awk 命令

awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2

相关内容