如何通过使用批处理比较两个文本文件来删除重复的单词或行?

时间:2019-06-12 18:31:45

标签: batch-file cmd

我正在运行一个程序,通过使用批处理比较两个文本文件来删除重复的行。

这是我个人使用的方法,通过从两个文本文件中删除重复的行来使我的工作更快。

我正在使用以下代码,

copy textfile1.txt output.txt >nul
findstr /lvxig:textfile1.txt textfile2.txt >>output.txt

textfile1.txt 包含

apple
orange
mango

textfile2.txt 包含

apple
mango
grapes

我希望output.txt中的输出是

orange
grapes

但是输出进入output.txt

apple
orange
mango
grapes

我不想合并两个文本文件。我想通过比较这两个文本文件来删除类似的重复项。

3 个答案:

答案 0 :(得分:1)

这种方法呢?

findstr /LVXIG:"textfile2.txt" "textfile1.txt" > "output.txt"
findstr /LVXIG:"textfile1.txt" "textfile2.txt" >>"output.txt"

或与普通redirection

(
    findstr /LVXIG:"textfile2.txt" "textfile1.txt"
    findstr /LVXIG:"textfile1.txt" "textfile2.txt"
) > "output.txt"

使用示例数据,第一个findstr命令行返回:

orange

第二个输出:

grapes

答案 1 :(得分:0)

如何创建哈希并计算出现次数?然后,仅使用出现一(1)次的事件。这样可以避免两次读取两个文件。

=== undupe.ps1

$hash = @{}
Get-Content 'testfile1.txt', 'testfile2.txt' | ForEach-Object { $hash[$_]++ }
foreach ($key in $hash.Keys) { if ($hash[$key] -eq 1) { Write-Output $key } }

从cmd shell或.bat文件脚本运行它。

powershell -NoLogo -NoProfile -File "undupe.ps1" >output.txt

答案 2 :(得分:0)

尝试一下:

cat textfile1.txt textfile2.txt | grep -Fvxf <(comm -12 <(sort -u textfile1.txt) <(sort -u textfile2.txt))

此代码的说明:

猫:从文件中读取数据

comm -12 <(sort -u textfile1.txt)<(sort -u textfile2.txt):仅显示两个文件中的重复行

grep -Fvxf:删除由通讯12引起的重复行

所以:

textfile1.txt:

apple
orange
mango

textfile2.txt:

apple
mango
grapes

退出:

orange
grapes

提出问题的用户想要它。