将两个文件之间的新行过滤到新文件

时间:2016-06-29 16:47:24

标签: batch-file text compare

我正在尝试比较两个文本文件并将结果保存在一个新文件中。它应该只显示新的行并忽略排序顺序。我只是想看看什么是新的,没有换行。为了实现这一点,我在批处理文件中尝试了几种方法,您可以在下面看到 首先,我使用uniq和sort来改变两个文件的顺序,如:

D:/filetype/sort.exe -b D:\filetype\listfile\listfile_clean_tmp3_1.txt -oD:\filetype\listfile\listfile_clean_tmp4.txt

之后我尝试将两个文件比较为新文件。

1)通过comm

D:/filetype/comm.exe --nocheck-order -2 -3 d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt

一个可怕的解决方案,无法正常工作。如果订单中存在不同的内容,则会产生大量错误结果。例如,如果我将结果保存到存档并再次与自身进行比较,则显示新行。

2)通过差异

D:/filetype/diff.exe --new-line-format="" --unchanged-line-format="" d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt

与.comm相同,如果我将存档文件与其自身进行比较,它将显示新行。

3)Grep,SED和Diff

D:/filetype/diff.exe -U $(wc -l < (D:/filetype/listfile/listfile_clean_tmp4.txt) (D:/filetype/listfile/listfile_clean_tmp4.txt D:/filetype/listfile/archive/tmp/all.txt | D:/filetype/grep.exe '^-' | D:/filetype/sed.exe 's/^-//g' > D:\filetype\listfile\listfile_clean_tmp5.txt

无法在Windows批处理上运行此操作,并且无法找出错误消息“文件或文件夹名称的错误语法”出现的原因。任何想法都会很棒。

一些进一步的信息 - 我在Windows中使用coreutils - 可以使用.py脚本,批处理,php和corutils - 我将结果添加到存档

这是一个示例文件: http://pastebin.com/raw/tNGSu2W6

首先:我将它与一个空的txt文件(all.txt)进行比较,在最后一步中我将它合并到all.txt(作为存档),并且在下一次运行时,他应该找不到任何差别。

copy /b D:\filetype\listfile\archive\*.txt D:\filetype\listfile\listfile_tmp_all.txt
D:/filetype/uniq.exe D:\filetype\listfile\listfile_tmp_all.txt > D:/filetype/listfile/archive/tmp/tmp_all2.txt
D:/filetype/sort.exe -b D:/filetype/listfile/archive/tmp/tmp_all2.txt -oD:/filetype/listfile/archive/tmp/all.txt

不要混淆任何人这是整件事(它有点简陋)。 http://pastebin.com/T68sqpET

更新1 更改了pastbin代码,diff.exe“< filename < filename > output”部件上有一个拼写错误,将在Windows上输出错误消息。这些数字也不是差异的错误。我使用“uniq.exe -c”并需要删除-c。

1 个答案:

答案 0 :(得分:0)

好吧我知道为什么comm没有正常工作。命令

D:/filetype/comm.exe --nocheck-order -2 -3 d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt

不需要--no-check-order,但并非全部。它在比较中失败的主要原因是,我在工具链中使用了uniq或merger,并且在编辑了部分文本文件后不再对它进行排序。非常重要的是,将与comm进行比较的文件始终按正确的顺序排序。以下是来自coreutils

的linux排序示例
D:/filetype/core/sort.exe -b D:\filetype\listfile\archive\tmp\bruteforce.txt -o D:\filetype\listfile\archive\tmp\bruteforce2.txt
D:/filetype/core/uniq.exe  D:\filetype\listfile\archive\tmp\bruteforce2.txt > D:\filetype\listfile\archive\tmp\bruteforce3.txt
D:/filetype/core/sort.exe -b D:\filetype\listfile\archive\tmp\bruteforce3.txt -o D:\filetype\listfile\archive\tmp\bruteforce4.txt

注意:排序不会有问题,如果您对同一个文件进行排序而不将其复制到其他位置(uniq除外,这样会对此做出反应)。我个人更喜欢临时文件,但它们不是排序所必需的。

D:/filetype/core/sort.exe -b D:/filetype/listfile/listfile.txt -o D:/filetype/listfile/listfile.txt

或者用简单的词语。&#34; 更改它&gt;排序&#34;如果你想比较它。