【问题标题】:Linux Comm on Windows - Output should be ZeroWindows 上的 Linux Comm - 输出应为零
【发布时间】:2016-07-09 14:16:59
【问题描述】:

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

好吧,我对 comm 的了解是,需要对两个文件进行排序,所以我为这两个文件添加了它,现在我尝试比较 New File > 与 Archive 并且输出应该是 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 的文件

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

【问题讨论】:

    标签: sorting batch-file comm


    【解决方案1】:

    好的,我能够弄清楚。 Grep 和 comm 将在比较时匹配空行。因此,如果您只有一个小的文本文件作为输入,而另一个有几个空行(在我的情况下是较大的),他可能会匹配所有空行,结果您将再次看到您的输入。

    要删除我使用 sed 的空白行

    窗户

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

    Linux

    sed '/^\s*$/d'
    

    现在 jup 又可以正常工作了。 (但别忘了排序)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-16
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多