比较两个文件并仅在不匹配时将输出存储在文件中

compare two files and store the output in a file only if there is a mismatch

我正在 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 循环的一点结果。

我只想在文件不匹配时才创建文件。如果没有不匹配,则根本不要创建文件。

我怎样才能做到这一点?

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