批处理,比较两个文件并将差异写入另一个文件

时间:2014-01-01 12:22:14

标签: string batch-file grep compare findstr

我已经搜索了解决方案,但我仍然遇到问题。我有两个文件:

File1.txt
 1111
 2222
 3333

File2.txt
 1111
 2222
 3333
 4444

我想要一个只有差异的输出文件:

File3.txt
 4444

我尝试过使用Findstr但由于字符串太大而无法正常工作。我也尝试过使用gerp,但我可以做到这一点。

这是我的批处理代码(因为字符串太长而无效):

findstr /vxg:vanilla_localisation.tsv mod_localisation.tsv > raf_changes.tsv 
for /f %%a in ('^<raf_changes.tsv find /v /c ""') do echo %%a differences found 

我也尝试过这段代码:

grep -f vanilla_localisation.tsv mod_localisation.tsv > raf_changes.tsv

但它只创建空文件。我是Windows用户。 希望你能帮我找到解决方案。

干杯

4 个答案:

答案 0 :(得分:4)

这应该有效:

findstr /v /g:file1.txt file2.txt >result.txt

我认为这适用于800个字符 - 对于20000行不会很快。

@echo off
for /f "delims=" %%a in (file2.txt) do (
   find "%%a" <"file1.txt" || >>result.txt echo %%a
)

答案 1 :(得分:2)

PowerShell有一个diff实用程序,如果这是一个选项;

@echo off
powershell "diff (Get-Content File1.txt) (Get-Content File2.txt) | foreach {$_.InputObject}" >result.txt

答案 2 :(得分:1)

您可以在linux中使用diff

diff file1.txt file2.txt
3a4
>  4444

使用grep

grep -vf file1.txt file2.txt
 4444

使用awk

awk 'NR==FNR {a[$0]=1;next} !a[$0]' file1.txt file2.txt
 4444

答案 3 :(得分:0)

使用comm实用程序(http://linux.101hacks.com/unix/comm-command-examples/):

comm -3 file1.txt file2.txt > file3.txt