Linux Comm on Windows - 输出应为零

Linux Comm on Windows - Output should be Zero

最近几天我在 Windows 批处理上用 comm 做了很多事情来比较彼此的文本文件。所以通常我不会做错任何事。在我的其他项目中,下面的代码工作正常,但在实际情况下却不行,我看不出任何原因。

好的,我了解到 comm 需要对两个文件进行排序,所以我为两个文件都添加了它,现在我尝试比较新文件 > 带存档,输出应该是 NOT 在 all.txt

里面
D:/filetype/core/sort.exe -b D:\filetype\test\all.txt -oD:\filetype\test\all.txt

D:/filetype/core/sort.exe -b D:\filetype\test\listfile_export_tmp2.txt -oD:\filetype\test\listfile_export_tmp2.txt

D:/filetype/core/comm.exe -2 -3 D:\filetype\test\listfile_export_tmp2.txt D:\filetype\test\all.txt > D:\filetype\test\output.txt

为了测试,我添加了我想与 all.txt 进行比较的文本,因此输出应该为零,因为这里没有什么新内容。但是结果 output.txt 正是我在第一个文本文件中得到的。我手动检查了 all.txt 并且我尝试比较的这些行在里面,我检查了排序是否正确使用测试文件和不同的字母。

所以这是我的想法

  1. 在我的其他项目中有一些我看不到的差异。它是 我的错
  2. 如果一个文本文件太小,Comm 无法比较两个文件,我尝试比较一个 50MB 的文件和一个 1KB 的文件

我可以根据要求提供这两个文件进行测试

好的,我想通了。 grep 和 comm 在比较时会匹配空行。因此,如果您只有一个小文本文件作为输入,而另一个文本文件中有一些空行(在我的情况下更大),他可能会匹配所有空行,结果您将再次看到您的输入。

为了删除空行我使用了 sed

Windows

sed.exe "/^\s*$/d" 

Linux

sed '/^\s*$/d'

jup 现在一切正常了。 (但不要忘记排序)