提取与另一个文件中的单词列表匹配的行

Lam*_*aMo 6 grep sed awk bioinformatics

我有文件 1,其中包含以下几行:

ATM 1434.972183
BMPR2 10762.78192
BMPR2 10762.78192
BMPR2 1469.14535
BMPR2 1469.14535
BMPR2 1738.479639
BMS1 4907.841667
BMS1 4907.841667
BMS1 880.4532628
BMS1 880.4532628
BMS1P17 1249.75
BMS1P17 1249.75
BMS1P17 1606.821429
BMS1P17 1606.821429
BMS1P17 1666.333333
BMS1P17 1666.333333
BMS1P17 2108.460317
BMS1P17 2108
Run Code Online (Sandbox Code Playgroud)

文件 2 有一个单词列表:

ATM
BMS1
Run Code Online (Sandbox Code Playgroud)

所以,输出将是这样的:

ATM 1434.972183
BMS1 4907.841667
BMS1 4907.841667
BMS1 880.4532628
BMS1 880.4532628
Run Code Online (Sandbox Code Playgroud)

我知道这是一个真正的重复问题,但我尝试了所有类型的grepsedawk,也许它会与你们这个小小的例子的作品,但我有一个非常巨大的文件> 1M lines和所有以前的方式不利于

它返回包含这些单词的部分行,尽管其中还有其他单词file 2与来自的行匹配file 1

Kus*_*nda 7

grep -Fw -f words myfile
Run Code Online (Sandbox Code Playgroud)

myfile这将提取文件中任何位置包含单词的行words

由于该选项,中的字符串words被视为固定字符串(而不是正则表达式)-F,并且该-w选项确保我们只获取包含完全相同单词的行(不允许单词中的子字符串匹配)。单词是来自字母数字字符和下划线字符集的连续字符序列。

文件中的单词words大多数会列出在单独的行中。