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 并且我尝试比较的这些行在里面,我检查了排序是否正确使用测试文件和不同的字母。
所以这是我的想法
- 在我的其他项目中有一些我看不到的差异。它是
我的错
- 如果一个文本文件太小,Comm 无法比较两个文件,我尝试比较一个 50MB 的文件和一个 1KB 的文件
我可以根据要求提供这两个文件进行测试
好的,我想通了。 grep 和 comm 在比较时会匹配空行。因此,如果您只有一个小文本文件作为输入,而另一个文本文件中有一些空行(在我的情况下更大),他可能会匹配所有空行,结果您将再次看到您的输入。
为了删除空行我使用了 sed
Windows
sed.exe "/^\s*$/d"
Linux
sed '/^\s*$/d'
jup 现在一切正常了。 (但不要忘记排序)
最近几天我在 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 并且我尝试比较的这些行在里面,我检查了排序是否正确使用测试文件和不同的字母。
所以这是我的想法
- 在我的其他项目中有一些我看不到的差异。它是 我的错
- 如果一个文本文件太小,Comm 无法比较两个文件,我尝试比较一个 50MB 的文件和一个 1KB 的文件
我可以根据要求提供这两个文件进行测试
好的,我想通了。 grep 和 comm 在比较时会匹配空行。因此,如果您只有一个小文本文件作为输入,而另一个文本文件中有一些空行(在我的情况下更大),他可能会匹配所有空行,结果您将再次看到您的输入。
为了删除空行我使用了 sed
Windows
sed.exe "/^\s*$/d"
Linux
sed '/^\s*$/d'
jup 现在一切正常了。 (但不要忘记排序)