Board logo

标题: [文本处理] 【已解决】BAT:两组文本数据,如果出现次数相同,则共同删除 [打印本页]

作者: 思想之翼    时间: 2019-9-25 11:23     标题: 【已解决】BAT:两组文本数据,如果出现次数相同,则共同删除

本帖最后由 思想之翼 于 2019-9-27 02:38 编辑

例如,E:\数据\内,有A、B两文本
A文本:01 02 03 01 02 03 03 04 05 05 05
B文本:00 02 03 01 02 03 04 04 05
标红数据为A、B两文本均出现,且次数相同,则共同删除
保留结果:
A文本:01 03 05 05
B文本:00 04
作者: terse    时间: 2019-9-25 16:55

本帖最后由 terse 于 2019-9-25 19:14 编辑

P一个
  1. @echo off & setlocal enabledelayedexpansion
  2. cd /d "E:\数据\"
  3. for /f "usebackq tokens=*" %%a in ("a.txt") do for %%b in (%%a) do set/a n+=1&set a!n!=%%b
  4. for /f "usebackq tokens=*" %%a in ("b.txt") do for %%b in (%%a) do set/a m+=1&set b!m!=%%b
  5. for /l %%i in (1,1,!n!) do (
  6.      set "f="
  7.      for /l %%j in (1,1,!m!) do if not defined f if /i "!a%%i!" == "!b%%j!" set a%%i=&set b%%j=&set f=1
  8. )
  9. if !m! gtr !n! set n=!m!
  10. for /l %%i in (1,1,!n!) do (
  11.      if "!a%%i!" neq "" if "!as!" == "" (set as=!a%%i!) else set as=!as! !a%%i!
  12.      if "!b%%i!" neq "" if "!bs!" == "" (set bs=!b%%i!) else set bs=!bs! !b%%i!
  13. )
  14. echo;!as!
  15. echo;!bs!
  16. pause
复制代码
少点FOR
  1. @echo off & setlocal enabledelayedexpansion
  2. cd /d "E:\数据\"
  3. for /f "usebackq tokens=*" %%a in ("a.txt") do for %%b in (%%a) do set /an+=1&set "a!n!=%%b"
  4. for /f "usebackq tokens=*" %%a in ("b.txt") do for %%b in (%%a) do (
  5.      set "f="
  6.      for /l %%c in (1,1,!n!) do if not defined f  if /i "%%b" == "!a%%c!" set "a%%c="&set "f=1"
  7.      if not defined f if defined bs (set bs=!bs! %%b) else set "bs=%%b"
  8. )
  9. for /l %%i in (1,1,!n!) do if defined a%%i if defined as (set as=!as! !a%%i!) else set "as=!a%%i!"
  10. echo;!as!
  11. echo;!bs!
  12. pause
复制代码

作者: xczxczxcz    时间: 2019-9-25 18:04

  1. $a = gc 'e:\数据\a.txt' -ReadCount 0;
  2. $b = gc 'e:\数据\b.txt' -ReadCount 0;
  3. $a1 = $b1 = @();
  4. if ($b.count -ge $a.Count) { $arr = $b.Count }else { $arr = $a.Count }
  5. for ($i = 0; $i -lt $arr; $i++) {
  6. if ($a[$i] -ne $b[$i]) { $a1 += $a[$i]; $b1 += $b[$i] }
  7. }
  8. sc 'e:\数据\a1.txt' -Value $($a1 -join ' ') -Force;
  9. sc 'e:\数据\b1.txt' -Value $($b1 -join ' ') -Force;
复制代码

作者: terse    时间: 2019-9-25 20:49

powershell
  1. $arr1 = $(gc  "E:\数据\a.txt").Trim() -Replace "[\r\n\s]+", ' ' -split (' ');
  2. $arr2 = $(gc  "E:\数据\b.txt").Trim() -Replace "[\r\n\s]+", ' ' -split (' ');
  3. (Compare-Object $arr1 $arr2 -PassThru |?{$_.SideIndicator -eq '<='}) -join ' '
  4. (Compare-Object $arr1 $arr2 -PassThru |?{$_.SideIndicator -eq '=>'}) -join ' '
复制代码





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