如何将一个文件中的条目与两个文件进行比较?

How to compare entries in one file to two files?

我有一个文件(名为 file1),其中包含名称及其 IP。它看起来像这样:-

VM1 2.33.4.22
VM2 88.43.21.34
VM3 120.3.45.66
VM4 99.100.34.5
VM5 111.3.4.66

我有两个文件(file2 和 file3),它们完全由 IP 组成。

文件 2 包括:-

120.3.45.66
88.43.21.34

文件 3 包括:-

99.100.34.5

我想将 file1 与 file2 和 file3 进行比较,并获取 file2 和 file3 中不存在的名称和 IP。所以输出将是:

VM1 2.33.4.22
VM5 111.3.4.66

如何获得所需的输出?

sed 's/\./\./g; s/.*/ &$/' file2 file3 | grep -vf - file1
  • 使用 sed 将文件 2 和 3 中的条目转换为适当的正则表达式。
  • 将此正则表达式列表通过管道传递给 grep,使用 -f - 从标准输入获取模式列表,使用 -v 打印文件中的 non 匹配行1.

您可以编写一个 shell 脚本来为您完成。

#!/bin/sh
cat .txt .txt > mergedFile.txt
grep -v -f mergedFile.txt .txt

您可以运行脚本使用以下命令 sh check.sh file2 file3 file1

awk 'NR==FNR { out[]=1; next} !out[]' <(/bin/cat file2 file3) file1

这使用与 sed 解决方案基本相同的东西,而是使用 awk