Но просто нужно немного результата всего цикла while.
Итак, перенаправьте весь вывод цикла while:
while read -r ....; do
comm -23 <(...) <(...)
done < input > output
Или добавить:
# this will truncate the output file, so we start empty
: > output
while read -r ....; do
comm -23 <(...) <(...) >> output
done < input
Я не хочу создавать пустой файл при сравнении двух файлов
Так проверьте, пусто оно или нет ...
out=$(comm -23 <(....) <(....))
if ((${#out} != 0)); then
printf "%s" "$out"
fi