[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

20元求批处理提取2.txt在1.txt中没有的行

报酬20元人民币
提取2txt在1txt中没有的行
手上有个能用的,但是速度太慢了,我有几百万数据需要处理
微信付款:18971801994


这有个示例:
  1. @echo off
  2. cls
  3. echo.
  4. echo.
  5. echo                            比较文本提取不重复
  6. echo,
  7. echo        如有:1.txt 2.txt,提取2.txt在1.txt里没有的行
  8. echo        文本2.txt应当比1.txt多一些内容。
  9. echo        重复的不要
  10. echo.
  11. set /p wb1=请输入要处理的[路径]文本2:
  12. set /p wb2=请输入要处理的[路径]文本1:
  13. set /p wb3=请输入处理后生成的[路径]文本:
  14. for /f "delims=" %%c in (%wb1%) do (
  15. findstr "%%c" %wb2%>nul ||echo %%c>>%wb3%)
  16. echo 处理完成
  17. ping /n 2 127.0.1 >nul
  18. goto :eof
复制代码

已处理,各位老铁

TOP

回复 2# 741474719


    代码发出来给大家分享一下吧,看看是否可以进一步优化。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher


    @echo off
cd /d "%~dp0"
set  wb1=1.txt
set  wb2=2.txt
set  wb3=3.txt
powershell ^
    $dict=New-Object 'System.Collections.Generic.Dictionary[[string],[int]]';^
    $text1=[IO.File]::ReadAllText('%wb1%', [Text.Encoding]:efault).split(\"`r`n\",[StringSplitOptions]::RemoveEmptyEntries);^
    $text2=[IO.File]::ReadAllText('%wb2%', [Text.Encoding]::Default).split(\"`r`n\",[StringSplitOptions]::RemoveEmptyEntries);^
    $fs=New-Object System.IO.FileStream('%wb3%', [System.IO.FileMode]::Create);^
    $sw=New-Object System.IO.StreamWriter($fs, [Text.Encoding]::Default);^
    for($i=0;$i -lt $text1.length;$i++){^
        if(-not $dict.ContainsKey($text1[$i])){^
            $dict.add($text1[$i],1);^
        };^
    };^
    for($i=0;$i -lt $text2.length;$i++){^
        if(-not $dict.ContainsKey($text2[$i])){^
            $sw.WriteLine($text2[$i]);^
        };^
    };^
    $sw.Flush();^
    $sw.Close();^
    $fs.Close();^
    $sw.Dispose();^
    $fs.Dispose();
pause

TOP

@echo off
cls
echo.
echo.
echo                            比较文本提取不重复
echo,
echo        如有:1.txt 2.txt,提取2.txt在1.txt里没有的行
echo        文本2.txt应当比1.txt多一些内容。
echo        重复的不要
echo.
set /p wb1=请输入要处理的[路径]文本2:
set /p wb2=请输入要处理的[路径]文本1:
set /p wb3=请输入处理后生成的[路径]文本:
for /f "delims=" %%c in (%wb1%) do (
findstr "%%c" %wb2%>nul ||echo %%c>>%wb3%)
echo 处理完成
ping /n 2 127.0.1 >nul
goto :eof

TOP

屌的一比,牛逼牛逼

TOP

本帖最后由 flashercs 于 2018-11-22 19:07 编辑

楼主最好把时间对比发出来,看看差距多少?
  1. @echo off
  2. cls
  3. echo.
  4. echo.
  5. echo                            比较文本提取不重复
  6. echo,
  7. echo        如有:1.txt 2.txt,提取2.txt在1.txt里没有的行
  8. echo        文本2.txt应当比1.txt多一些内容。
  9. echo        重复的不要
  10. echo.
  11. set /p wb1=请输入要处理的[路径]文本2:
  12. set /p wb2=请输入要处理的[路径]文本1:
  13. set /p wb3=请输入处理后生成的[路径]文本:
  14. findstr /livg:"%wb1%" "%wb2">"%wb3%
  15. echo 处理完成
  16. ping /n 2 127.0.1 >nul
  17. goto :eof
复制代码

TOP

  1. gawk "FNR==NR{a[$0]=1}; FNR<NR && !a[$0]{print}" 1.txt 2.txt > 3.txt
复制代码

TOP

返回列表