找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18704|回复: 7

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

  [复制链接]
发表于 2018-11-22 10:41:15 | 显示全部楼层 |阅读模式
报酬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
复制代码
 楼主| 发表于 2018-11-22 11:28:21 | 显示全部楼层
已处理,各位老铁
发表于 2018-11-22 11:56:26 | 显示全部楼层
回复 2# 741474719


    代码发出来给大家分享一下吧,看看是否可以进一步优化。
 楼主| 发表于 2018-11-22 17:32:26 | 显示全部楼层
回复 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
 楼主| 发表于 2018-11-22 17:33:10 | 显示全部楼层
@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
 楼主| 发表于 2018-11-22 17:34:07 | 显示全部楼层
屌的一比,牛逼牛逼
发表于 2018-11-22 18:57:34 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2018-11-22 19:28:16 | 显示全部楼层
  1. gawk "FNR==NR{a[$0]=1}; FNR<NR && !a[$0]{print}" 1.txt 2.txt > 3.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:50 , Processed in 0.018888 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表