У меня есть 2 файла. names1.txt и names2.txt.
Мне нужно узнать, какие имена присутствуют в файле names1.txt, но отсутствуют в файле names2.txt. Затем мне нужно сохранить их в другом файле missing_names.txt.
Команда Diff дает разницу, но она также печатает много информации. Кроме того, я не хочу знать имена, которые есть в names2.txt, но отсутствуют в names1.txt. Поэтому операция (names1.txt - names2.txt) выглядит так.
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
содержат только имена.
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
удаляют их из начала строки, если они есть, и выводят только измененные (т. Е. Совпадающие) строки.