Board logo

标题: [文本处理] [已解决]批处理比对两个文本文件出错了,求助问题出在那? [打印本页]

作者: thp2008    时间: 2023-9-2 14:09     标题: [已解决]批处理比对两个文本文件出错了,求助问题出在那?

曾经在之前的贴子中,求助过比对两个文本文件中不同名称的行,一直用着没有问题。只前的贴子:http://www.bathome.net/viewthread.php?tid=66449&highlight=
但是我今天再比对,两个文本文件的时候,就发现出错了,比对不出来,明明有7行是不同的,但就是找不出来,我手工找了4个出来,高手帮我看看问题出在那里,我全部打包上传到附近中去。

附件下载:
https://netcut.cn/api/file/downl ... nfizs22xzsu8s5c5tr1
作者: hfxiang    时间: 2023-9-2 15:02

回复 1# thp2008
  1. gawk "NR==FNR{if(!($0 in T)){a[++i]=$0;T[$0]=1}next}!($0 in T){a[++i]=$0;T[$0]=2;next}$0 in T{if(T[$0]==1){T[$0]=3}}END{for(j=0;j++<i;){if(0+T[a[j]]<3){print a[j]}}}" Full.txt BiDui.txt>out.txt
复制代码
结果(out.txt)
  1. 棕颈鸭
  2. 丑鸭
  3. 弗氏鸥
  4. 黑顶林莺
  5. 灰翅鸥
  6. 梯氏鸫
  7. 细纹苇莺
复制代码
不知道是否满足要求?

另简版(特例:BiDui.txt 是 Full.txt 的子集时):
  1. gawk "NR==FNR{a[$0]++;next}!a[$0]++" BiDui.txt Full.txt>out.txt
复制代码

作者: 77七    时间: 2023-9-2 15:20

写反了吧,两个文本。
  1. @echo off
  2. mode con cols=60 lines=41
  3. chcp 65001
  4. set "file1=1.txt"
  5. set "file2=2.txt"
  6. call :1 "%file1%" "%file2%"
  7. call :1 "%file2%" "%file1%"
  8. pause>nul & exit
  9. :1
  10. setlocal
  11. set n=0
  12. echo 以下字符串 仅在 %~2 中存在
  13. for /f "usebackq delims=" %%a in ("%~1") do (
  14. set _"%%a"=1
  15. )
  16. for /f "usebackq delims=" %%a in ("%~2") do (
  17. if not defined _"%%a" (
  18. echo %%a
  19. set /a n+=1
  20. )
  21. )
  22. echo Total number of bird species: %n%
  23. echo=&echo=
  24. endlocal
复制代码





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