我有一份文件,里面有以下几行:
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文件2有一个单词列表:
ATM
BMS1因此,输出将如下所示:
ATM 1434.972183
BMS1 4907.841667
BMS1 4907.841667
BMS1 880.4532628
BMS1 880.4532628我知道这确实是一个重复的问题,但我尝试了所有类型的grep、sed和awk,也许这个很小的例子会适用于你们,但是我有一个非常大的文件> 1M lines,以前的所有方法都没有帮助。
它返回包含这些单词的部分行,尽管file 2中还有与file 1中的行匹配的其他单词。
发布于 2018-07-25 19:03:46
grep -Fw -f words myfile这将提取myfile中包含文件words anywhere中的单词的行。
words中的字符串由于-F选项而被视为固定字符串(而不是正则表达式),-w选项确保我们只获得包含完全相同单词的行(不允许在单词中匹配子字符串)。单词是一组字母数字字符和下划线字符的连续字符序列。
文件words中的单词最多列在单独的行中。
发布于 2018-07-25 19:52:22
试试join命令:
join file1 file2
ATM 1434.972183
BMS1 4907.841667
BMS1 4907.841667
BMS1 880.4532628
BMS1 880.4532628https://unix.stackexchange.com/questions/458431
复制相似问题