使用Grep仅使用数字作为模式获得所需输出时出现问题

sta*_*tar 0 linux awk grep

我试图从文件2 grep行匹配文件1中的值,但输出提供更多行.

文件1看起来像这样:

$ head b.txt
5
11
26
27
Run Code Online (Sandbox Code Playgroud)

文件2 a.txt,,,看起来像

1509 5
1506 11
1507 12
339 26
1000 27
1000 100
Run Code Online (Sandbox Code Playgroud)

我使用的命令:

grep -wFf b.txt a.txt
Run Code Online (Sandbox Code Playgroud)

结果我想:

1509 5
1506 11
339 26
1000 27
Run Code Online (Sandbox Code Playgroud)

它给了我所有的东西b.txt,但也有一些额外的线,例如,

1509 5
1506 11
1507 12
339 26
1000 27
1000 100
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

gee*_*use 5

我模拟了你的问题并相信我知道发生了什么.如果在结尾处有一个空行b.txt,我会得到与您相同的输出.如果我删除末尾的空行b.txt,我会得到你想要的输出.

?  ~ grep -wFf b.txt a.txt
1509 5
1506 11
339 26
1000 27
Run Code Online (Sandbox Code Playgroud)

从grep的手册页:

-f file, --file=file 从文件中读取一个或多个换行符分隔的模式. 空模式行匹配每个输入行. 换行符不被视为模式的一部分.如果file为空,则不匹配任何内容.

我相信这Empty pattern lines match every input line.是你错误输出的原因.