Я сравниваю несколько файлов в цикле while и сохраняю вывод в новых файлах.
я делаю как показано ниже
while IFS='|' read -r work_table_name final_table_name;do
comm -23 <(sort /home/$USER/work_schema/${work_table_name}_work_schema.txt) <(sort /home/$USER/final_schema/${final_table_name}_final_schema.txt) > /home/$USER/mismatched_schema/${final_table_name}.txt
done < /home/$USER/tables.txt
Я получаю то, что хочу. Но просто нужно немного результата всего цикла while
.
Я хочу создавать файлы только тогда, когда между файлами есть несоответствие. Если несоответствия нет, то вообще не создавайте файл.
Как я могу этого добиться?
@jww Спасибо за ваш комментарий 1) Я сравнил файлы в своем коде 2) Я не пытаюсь найти пустой ли какой-либо файл. Я в основном не хочу создавать пустой файл при сравнении двух файлов
Проверьте man diff
But just need a bit of result of the whole while loop.
Итак, перенаправьте весь вывод цикла 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
I basically don't want to create a empty file while comparing two files
Так что проверяйте, пуст он или нет...
out=$(comm -23 <(....) <(....))
if ((${#out} != 0)); then
printf "%s" "$out"
fi
Возможный дубликат Сравните два файла построчно и сгенерируйте разницу в другом файле, Как проверить, пуст ли файл в Bash?, Как передать вывод из одного процесса в другой, но выполнять только в том случае, если у первого есть вывод? и т. д.