Board logo

标题: [文本处理] 批处理比较a.txt和b.txt两个文本内容,列出所有不一致,具体需求如下 [打印本页]

作者: mnokoko    时间: 2023-10-29 12:52     标题: 批处理比较a.txt和b.txt两个文本内容,列出所有不一致,具体需求如下

文本 a.txt内容如下(每行内容不固定):
PHIYOUSB3014TB
PHIYOUSB3014TB
PHIYOUSB3014TB
PHIYOUSB3014TB
SuperSpeedUSB
BillboardDevice

文本 b.txt内容如下(每行内容不固定):
PHIYOUSB3014TB
SuperSpeedUSB
PHIYOUSB3014TB
USBAudio

欲求效果如下:
列出b.txt比a.txt少的几行信息
PHIYOUSB3014TB
PHIYOUSB3014TB
BillboardDevice

自己写的仅能列出一行PHIYOUSB3014TB,而不是两行PHIYOUSB3014TB
作者: 77七    时间: 2023-10-29 15:07

  1. @echo off
  2. for /f "useback delims=" %%a in ("a.txt") do (
  3. set /a #"%%a"+=1
  4. )
  5. for /f "useback delims=" %%a in ("b.txt") do (
  6. set /a #"%%a"-=1
  7. )
  8. for /f "tokens=1-2 delims=#=" %%a in ('set #') do (
  9. for /l %%l in (1,1,%%b) do (
  10. echo %%~a
  11. )
  12. )
  13. pause
复制代码

如果文本如样本一样简单短小,试试这样
作者: mnokoko    时间: 2023-10-29 15:32

本帖最后由 mnokoko 于 2024-1-10 22:50 编辑

回复 2# 77七
C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_30D5:USB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_30D4:SuperSpeedUSB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_30D2:SuperSpeedUSB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_A354&MI_01:USB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_0BDA&PID_8153:Realtek"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_FF68&PID_FF68:PHIYOUSB3014TB"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"USB\VID_17EF&PID_A354:USBCompositeDevi"-=1 )
找不到操作数。

C:\Users\A\Desktop\devcon>(set /a #"askjdfhah"-=1 )

C:\Users\A\Desktop\devcon>for /F "tokens=1-2 delims=#=" %a in ('set #') do (for /L %l in (1 1 %b) do (echo %~a ) )

C:\Users\A\Desktop\devcon>(for /L %l in (1 1 -1) do (echo askjdfhah ) )

C:\Users\A\Desktop\devcon>pause
请按任意键继续. . .
作者: mnokoko    时间: 2023-10-29 15:37

a.txt两个文本还有特殊字符,如下
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
USB\VID_FF68&PID_FF68:PHIYOUSB3014TB
作者: hfxiang    时间: 2023-10-29 15:51

本帖最后由 hfxiang 于 2023-10-29 17:18 编辑

回复 1# mnokoko

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )实现方式如下:
  1. gawk "NR==FNR{a[++M]=$0;next}{b[++N]=$0}END{PROCINFO[\"sorted_in\"]=\"@ind_num_asc\";for(i=1;i<=M;i++){out=1;for(j in b){if(a[i]==b[j]){delete b[j];out=0;break}}if(out)print a[i]}}" a.txt b.txt>c.txt
复制代码

作者: mnokoko    时间: 2023-10-29 16:42

回复 5# hfxiang
^ syntax error报错
作者: Nsqs    时间: 2023-10-29 17:04

用PowerShell 1行代码就解决了,论坛里搜一下吧,懒得再写了,此类问题已经问过好多次了
作者: hfxiang    时间: 2023-10-29 17:19

回复 6# mnokoko

复制粘贴出错 ,已修正
作者: terse    时间: 2023-10-29 18:00

powershell处理行不
  1. powershell -c "(Compare (GC a.txt) (GC b.txt)).Where({ $_.SideIndicator -eq '<=' }).ForEach({$_.InputObject})"
复制代码

作者: mnokoko    时间: 2023-10-29 18:49

回复 7# Nsqs
会的不难,难的不会呀




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