сравнить два файла и сохранить результат в файле, только если есть несоответствие - PullRequest
0 голосов
/ 28 мая 2019

Я сравниваю несколько файлов в цикле 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.

Я хочу создавать файлы только в случае несоответствия между файлами. Если нет несоответствия, не создавайте файл вообще.

Как мне этого добиться?

1 Ответ

1 голос
/ 28 мая 2019

Но просто нужно немного результата всего цикла 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
...