Grep 用另一个(非常大的文件)过滤一个文本文件

Nat*_*tha 2 linux grep centos matching

我会尽量保持简单,因为我对 grep/linux 没有那么丰富的经验。

我有一个非常大的 .txt 文件(1.7GB),格式如下:

username:email:IP
Run Code Online (Sandbox Code Playgroud)

我有另一个较小的 .txt 文件(大约 10 万行文本),其中仅包含:

username
Run Code Online (Sandbox Code Playgroud)

我想制作一个输出列表,其中包含在大型和小型 .txt 文件中找到的用户名(不区分大小写),但我希望它们也具有在较大文本文件中找到的电子邮件和 IP。

所以我的最终输出将采用以下格式:

username:email:IP
Run Code Online (Sandbox Code Playgroud)

但它只会包含在两个 .txt 文件中找到的用户名

fed*_*qui 6

您只需要以下-f选项grep

grep -f smaller.txt large.txt
Run Code Online (Sandbox Code Playgroud)

如果您想让它不区分大小写,请使用-i. 请注意,这会使grep速度变慢:

grep -if smaller.txt large.txt
Run Code Online (Sandbox Code Playgroud)

测试

小文件:

$ cat small 
me
you
him
Run Code Online (Sandbox Code Playgroud)

大文件:

$ cat large 
a1:aaa@bbb.com:123
me:me@bbb.com:123
a2:aaa@bbb.com:123
YOU:you@bbb.com:123
aaa:aaa@bbb.com:123
Run Code Online (Sandbox Code Playgroud)

火柴:

$ grep -if small large
me:me@bbb.com:123
YOU:you@bbb.com:123
Run Code Online (Sandbox Code Playgroud)