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



我正在尝试比较两个文本文件,并将结果保存在新文件中。它应该仅显示新的线条,而忽略排序订单。我只想看看什么是新的,没有线路变化。为了达到这一点,我尝试了下面可以看到的批处理文件中的几种方法。首先,我使用uniq并排序更改两个文件的顺序,例如:

D:/filetype/sort.exe -b D:filetypelistfilelistfile_clean_tmp3_1.txt -oD:filetypelistfilelistfile_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:filetypelistfilelistfile_clean_tmp5.txt

一个可怕的解决方案,无法正常工作。如果顺序有所不同,它会提供很多错误的结果。例如,如果我将结果保存到档案中,并将其再次与其进行比较,则它正在显示新行。

2)通过diff

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:filetypelistfilelistfile_clean_tmp5.txt

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

3)grep,sed and 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:filetypelistfilelistfile_clean_tmp5.txt

无法在Windows批处理上运行此操作,也无法弄清楚为什么出现错误消息"错误的文件或文件夹名称"。任何想法都会很棒。

一些futher信息 - 我在Windows内使用Coreutils - 可以使用.py脚本,批处理,PHP和Corutils - 我将结果添加到存档

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

首先:我将其与一个空的txt文件(all.txt)进行比较,在最后一步中,我将其合并到All.txt(As Archive)和下一个运行中,他找不到任何区别。

copy /b D:filetypelistfilearchive*.txt D:filetypelistfilelistfile_tmp_all.txt
D:/filetype/uniq.exe D:filetypelistfilelistfile_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上trow错误消息。而且数字不是差异的错。我使用了" uniq.exe -c",需要删除-c。

好吧,我弄清楚了为什么COMM无法正常工作。命令

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

不需要--no-check-order,但这还不是全部。它未能比较的主要原因是,我在Mein工具链中使用了Uniq或合并,并且在编辑了部分文本文件后,它始终不再严格。将与通信进行比较的文件总是以正确的顺序排序非常重要。这是一个来自Coreutils

的Linux排序的示例
D:/filetype/core/sort.exe -b D:filetypelistfilearchivetmpbruteforce.txt -o D:filetypelistfilearchivetmpbruteforce2.txt
D:/filetype/core/uniq.exe  D:filetypelistfilearchivetmpbruteforce2.txt > D:filetypelistfilearchivetmpbruteforce3.txt
D:/filetype/core/sort.exe -b D:filetypelistfilearchivetmpbruteforce3.txt -o D:filetypelistfilearchivetmpbruteforce4.txt

注意:如果在不复制其他位置的情况下对同一文件进行排序(除了UNIQ之外,那对这样做的反应不佳)就不会遇到麻烦。我个人更喜欢临时文件,但不是排序的必要条件。

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

或用简单的单词.." 更改>对其进行分类"如果您想比较它。

最新更新