我有 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