Bash 脚本问题 - 比较两个列表并创建第三个列表

Bash 脚本问题 - 比较两个列表并创建第三个列表

我已经开始编写一个脚本来检查 Xen 主机...这个问题实际上是双重的。首先我有下面的代码片段;

TMPFILE001=/tmp/FILE001.rx
TMPFILE002=/tmp/FILE002.rx
TMPFILE003=/tmp/FILE003.rx

xe vm-list params=uuid,is-控制域 | grep -B1 真 | grep uuid | 查询awk {'print $5'} > $TMPFILE001
xe vm-list params=uuid --minimal | tr ',' '\n' > $TMPFILE002

所以这给了我两个列表,我想删除 FILE002.rx 中出现的任何内容,使其不再出现在 FILE001.rx 中,并将其输出到 FILE003.rx。

理想情况下,我根本不会在其中使用任何文件,但我正在努力通过尝试在变量中捕获它们来使其工作。

因此,如果可能的话,最好运行脚本,比较两个命令的输出,并且仅在命令 2 的输出从命令 1 中取出后才显示剩余部分。

命令1的输出;

猫 /tmp/FILE001.rx
468190e5-c78b-4337-8094-20638353b470
5926bbf3-c48c-4c2a-8113-d7e58520cfe7
3f98ee14-5e60-4e9b-852a-f924ffe80791

命令 2 的输出(已修剪);

猫 /tmp/FILE002.rx |头-5
37ae6b9e-8a00-ab10-7e17-3d70ab275b9b
d8208537-0d69-1332-9301-4699d194430f
1cf06668-5450-4d44-a7ba-c2c7b6bcd6b2
7d11c6e3-48ef-0e5e-c6ed-e8f2548533fd
7d3d0ba3-a6d6-d2a7-99f0-06fa74e625fa

答案1

看一下comm命令。取以下两个文件

f1.txt

item1
item2
item3
item4
item5
item6

f2.txt

item1
item2
item22
item3
item4

输出

$ comm -23 f1.txt f2.txt
item5
item6

Comm 的手册页条目

答案2

要回答问题的一部分,您可以使用带 -F 标志的 grep 来比较两个文件之间的差异。然后我将其与 -v 结合起来,以消除我所需要的差异;

grep -vxFf $TMPFILE001 $TMPFILE002 > $TMPFILE003

答案3

或者,如果您愿意,可以这样做:

diff file1 file2 | grep "<" | sed 's/^<\ //g' > file3

相关内容