Найти ТОЛЬКО разницу (дополнительную) между двумя файлами в unix

У меня есть 2 файла. names1.txt и names2.txt.

Мне нужно узнать, какие имена присутствуют в файле names1.txt, но отсутствуют в файле names2.txt. Затем мне нужно сохранить их в другом файле missing_names.txt.

Команда Diff дает разницу, но она также печатает много информации. Кроме того, я не хочу знать имена, которые есть в names2.txt, но отсутствуют в names1.txt. Поэтому операция (names1.txt - names2.txt) выглядит так.

-2
18.11.2018, 21:15
2 ответа
cat name_1.txt | while read line
do
  grep -q "$line" name_2.txt
  if [ "$?" -gt "0" ]; then
     echo "$line" >> name_3.txt
  fi
done

ПРИМЕЧАНИЕ: Предполагается, что name_1.txt и name_2.txt содержат только имена.

0
28.01.2020, 05:17
diff <(sort -u names2.txt) <(sort -u names1.txt) | 
  sed -n -e 's/^> //p' > missing_names.txt 

или

diff <(sort -u names1.txt) <(sort -u names2.txt) | 
    sed -n -e 's/^< //p' > missing_names.txt 

Любой из них даст вам ТОЛЬКО имена, которые есть в names1, но не в names2.

diff (без параметров формата вывода, таких как -u ) печатает добавления с префиксом > (>, за которым следует пробел) и удаления с префиксом < (<с пробелом). Сценарии sed удаляют их из начала строки, если они есть, и выводят только измененные (т. Е. Совпадающие) строки.

1
28.01.2020, 05:17

Теги

Похожие вопросы