Bash Grep|awk 并打印不同文件的结果

Bash Grep|awk 并打印不同文件的结果

我有 2 个包含 IP 地址的文件

第一个文件:

192.168.1.1:4.4.4.4
192.168.1.2:4.4.2.2
192.168.1.1:8.8.8.8
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

第二个文件:

4.4.2.2
4.4.8.8

现在我想要一个脚本,它从文件 2 中获取每个值并检查该值是否存在于文件 1 中。如果该值存在,它应该打印文件 1 中的整行。

例如上面示例的期望结果:

192.168.1.2:4.4.2.2
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

答案1

grep -F -f file2.txt file1.txt

这将读取 中的行file2.txt并将它们用作在 中搜索的模式file1.txt


如果您只想检查第二列中的匹配项,可以使用以下 awk 命令:

awk -F: 'NR==FNR{a[$0];next}$2 in a' file2.txt file1.txt

这将从中读取每个字符串并用它们file2.txt创建一个数组( )。a然后它将遍历file1.txt并检查数组中是否存在第 2 列中的值a。如果是,则将打印整行。

答案2

您可以循环遍历第二个文件并从第一个文件中 grep 。

for pattern in `cat file2.txt` ; do grep $pattern file1.txt ; done

如果您只想匹配冒号后的结尾。

for pattern in `cat file2.txt` ; do grep :$pattern$ file1.txt ; done

相关内容