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

时间:2019-05-28 01:24:10

标签: linux bash comm

我正在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 个答案:

答案 0 :(得分:1)

  

但是只需要整个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