比较两个文件并仅在不匹配时将输出存储在文件中
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
我正在 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