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

[文本处理] 批处理怎样把a.txt不包含b.txt的行 输出c.txt?

txt文档里 都是下面这种:    a.txt里是几百 几千行    b.txt里是几千 几万行  txt文档编码是:ansi

https://weixin.qq.com/g/AwYAAAmHhJK5ZKkDwtToNJX4zdOb6D3KRrNfYDkkZMZiKX3r1BjZayJlWcV1mdfs
https://weixin.qq.com/g/AwYAAMmnmvr6F4tjoajqus4efE0uvaxgcHzcLjtiTM7iJVay-6tLBn2mlvGSa6L6
https://weixin.qq.com/g/AwYAAKgFPed30vmx1i6QZdtfQGTzAG0a78b1gUMriRTxvVUAPNv0M1lnGzShFAEk
https://weixin.qq.com/g/AwYAAP_quFnyC2PdADGHbc4Q6CG6xJB3a-a9Ek0a1B_GkGx3_PD9aj4jxnusN_-k
https://weixin.qq.com/g/AwYAAJab7gk_fFCX1NFWm_j-lRd2ORQ4M6MShnuVsXmBXXY5nNSZ3cnt4eE9cwuJ
https://weixin.qq.com/g/AwYAAMM8otYC-61TiuE7Z_j4OYhLqurLx7viF0pAgdvRK2A8GcRVQI-AjoqqEVa0
https://weixin.qq.com/g/AwYAACNkAJn-dvtdx81TVXk6hKml8tWbBPRWzKVa4PDzp4aq6_5tzetfrFB7Xq5n


要达到效果是:
a.txt中的行  不存在  b.txt里面,把不存在的  提取到c.txt


在论坛搜索了一些代码 运行没有用
要么直接是空文件 要么提取出来的 根本不正确 明明包含了 也给全部提取出来了。

这些是部分搜索的:(我测试 如果是txt每行随便 几行数字  是可行,但我上面的玩意不行)
1. findstr /v /i /g:2.txt 1.txt > 3.txt
2. grep -v -f 2.txt 1.txt > 3.txt
3. comm -23 1.txt 2.txt > 3.txt
4. awk 'FNR==NR{a[$0];next} !($0 in a)' 2.txt 1.txt > 3.txt
5. diff 1.txt 2.txt | grep '<' | cut -d '<' -f2 > 3.txt





本帖标题特意这样写的,方便以后有朋友 遇到这个问题 可以直接搜到。有大神看到 希望能赐教下。

回复 10# 77七

谢谢你的解答

TOP

回复 9# 881966

代码是我针对1楼文本写的。对另一个帖子,含特殊字符的,并且文本超大,考虑到效率,我写不出合适代码。
bat小白,请多指教!谢谢!

TOP

回复 8# 77七


    http://www.bathome.net/thread-65222-1-1.html
     含特殊字符与超大文本

TOP

回复 6# 881966不对
回复 7# 881966
请具体说说,举例说明
bat小白,请多指教!谢谢!

TOP

a.txt与b.txt相同时,c.txt结果好像错误

TOP

回复 4# 77七

也可以认为b.txt与a.txt不相同的内容保存为c.txt,不知道对不对?

TOP

powershell 试过么
  1. $a = [IO.File]::ReadAllLines('a.txt' ,[Text.Encoding]::Default)
  2. $b = [IO.File]::ReadAllLines('b.txt',[Text.Encoding]::Default)
  3. (diff $a $b).Where({  $_.SideIndicator -eq '=>'}).InputObject|Out-File 'c.txt' -Encoding default
复制代码

TOP

回复 3# ximenhao
可以描述为 “在b.txt中删除b.txt和a.txt的相同行,结果保存到c.txt”
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


   老铁 好像没问题 ,灰常感谢 。我上面表述可能有问题?我要的结果,把你这里面代码 对换  a.txt  和 b.txt的位置 就搞定了。

TOP

  1. @echo off
  2. for /f "delims=" %%b in ('type "b.txt"') do (
  3. set _"%%b"=1
  4. )
  5. for /f "delims=" %%a in ('type "a.txt"') do (
  6. if not defined _"%%a" (
  7. >>c.txt echo,%%a
  8. )
  9. )
  10. pause
复制代码

这样能行吗?
bat小白,请多指教!谢谢!

TOP

返回列表