如何将一个文件中的条目与两个文件进行比较?
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
。
我有一个文件(名为 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
。