Board logo

标题: [文本处理] 批处理BAT如何截取数字排序并排重? [打印本页]

作者: freesoft00    时间: 2014-5-5 19:32     标题: 批处理BAT如何截取数字排序并排重?

1.txt的文本,内有数字,都是用空格隔开的,我只取第三块和第四块的数据
用的是for命令,第三块数据是%%i 第四块的数据是%%J
然后后面跟的是命令,比如
dir %%i
dir %%J

这些都没有问题,问题是数据中有相同的,希望排重,如果可以最好按大小排序。
%%i和%%J其本身的数据就是按大小排列的,但是两组数据在一起就不一定了。
比如
4      5
6      8
15    14

都是数字,没有其它字符。
作者: freesoft00    时间: 2014-5-5 19:35

本帖最后由 freesoft00 于 2014-5-5 20:20 编辑

kkkkkkkkkkkkkkkkkk这里的问题删除掉了。
作者: CrLf    时间: 2014-5-5 19:50

看不太懂,建议提供处理前后样本,量不要大,有代表性即可
作者: freesoft00    时间: 2014-5-5 20:23

00                   235       107780084
01        107780085       312576704
02        107780148       312576704
作者: freesoft00    时间: 2014-5-5 20:25

我把二楼的问题删除了,只看一楼的就可以,文本样本类似这样,第二列和第三列是需要处理的数据,就上面的数据来说312576704就是重复的,有两个。
作者: DAIC    时间: 2014-5-5 21:11

  1. @echo off
  2. for /f "tokens=2-3" %%i in (1.txt) do (
  3.     if not defined 2_%%i (
  4.         if not defined 3_%%j (
  5.             echo dir %%i
  6.             echo dir %%j
  7.             set 3_%%j=1
  8.         ) else (
  9.             set 2_%%i=1
  10.         )
  11.     )
  12. )
  13. pause
复制代码

作者: freesoft00    时间: 2014-5-6 10:33

dir 235
dir 107780084
dir 107780085
dir 312576704

感谢,少了一个数字,少了107780148  ,另外,相邻的书是否也可以排除掉,比如107780084、107780085
只保留107780084,如果这个不好实现,那么把原来的处理好也可以。
作者: terse    时间: 2014-5-6 13:07

本帖最后由 terse 于 2014-5-6 13:11 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2-3" %%i in (1.txt) do (
  3.     set/a $%%i=%%i+1,#%%i=%%i-1,$%%j=%%j+1,#%%j=%%j-1,f=0
  4.     for %%a in (%%i %%j) do (
  5.         for %%b in (%%a !$%%a! !#%%a!) do if defined _%%b set f=1
  6.         if !f! == 0 echo dir %%a
  7.         set /a _%%a=_!#%%a!=_!$%%a!=f=0
  8.     )
  9. )
  10. pause
复制代码





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