标题: [文本处理] 批处理比较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
- @echo off
- for /f "useback delims=" %%a in ("a.txt") do (
- set /a #"%%a"+=1
- )
- for /f "useback delims=" %%a in ("b.txt") do (
- set /a #"%%a"-=1
- )
- for /f "tokens=1-2 delims=#=" %%a in ('set #') do (
- for /l %%l in (1,1,%%b) do (
- echo %%~a
- )
- )
- 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 )实现方式如下:- 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处理行不- powershell -c "(Compare (GC a.txt) (GC b.txt)).Where({ $_.SideIndicator -eq '<=' }).ForEach({$_.InputObject})"
复制代码
作者: mnokoko 时间: 2023-10-29 18:49
回复 7# Nsqs
会的不难,难的不会呀
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |