Board logo

标题: 20元求批处理提取2.txt在1.txt中没有的行 [打印本页]

作者: 741474719    时间: 2018-11-22 10:41     标题: 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
复制代码

作者: 741474719    时间: 2018-11-22 11:28

已处理,各位老铁
作者: Batcher    时间: 2018-11-22 11:56

回复 2# 741474719


    代码发出来给大家分享一下吧,看看是否可以进一步优化。
作者: 741474719    时间: 2018-11-22 17:32

回复 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
作者: 741474719    时间: 2018-11-22 17:33

@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
作者: 741474719    时间: 2018-11-22 17:34

屌的一比,牛逼牛逼
作者: flashercs    时间: 2018-11-22 18:57

本帖最后由 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
复制代码

作者: WHY    时间: 2018-11-22 19:28

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





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2