我已经尝试了该网站上的所有建议,但输出不完整。
文件 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 正则表达式字符。所以不要调用
grep
with-E
。
答案3
您可以使用下面的 awk 命令
awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2