Проблема с сценарием Bash – сравните два списка и создайте третий

У меня есть начало скрипта, который я собираю, чтобы проверить хосты Xen … этот вопрос на самом деле двоякий. Во-первых, у меня есть приведенный ниже фрагмент кода;

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

 xe vm-list params = uuid, is-control-domain |  grep -B1 true |  grep uuid |  awk {'print $ 5'}> $ TMPFILE001
 xe vm-list params = uuid --minimal |  tr ',' '\ n'> $ TMPFILE002 

Таким образом, это дает мне два списка, я хочу удалить все, что появляется в FILE002.rx, из FILE001.rx и вывести его на FILE003.rx.

В идеале у меня не было бы никаких файлов, используемых в этом вообще, но я изо всех сил пытался заставить его работать, пытаясь захватить их в переменных.

Поэтому, если возможно, было бы лучше запустить скрипт, сравнить вывод двух команд и показать только оставшуюся часть после вывода команды 2 из команды 1.

Вывод команды 1;

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

Вывод команды 2 (обрезка);

 cat /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

Посмотрите на команду comm . Возьмите следующие два файла

f1.txt

 item1 item2 item3 item4 item5 item6 

f2.txt

 item1 item2 item22 item3 item4 

Вывод

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

запись man-страницы для Comm

Чтобы ответить на одну часть вопроса, вы можете использовать grep с флагом -F, чтобы сравнить разницу между двумя файлами. Затем я объединил это с -v, чтобы отвлечься от того, что мне нужно;

 grep -vxFf $ TMPFILE001 $ TMPFILE002> $ TMPFILE003

Или, если вы предпочитаете, вы можете это сделать:

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