Board logo

标题: [文件操作] 批处理如何查找txt文本指定列中是否含相同字符串? [打印本页]

作者: 黎0130    时间: 2015-8-26 13:39     标题: 批处理如何查找txt文本指定列中是否含相同字符串?

本帖最后由 pcl_test 于 2016-7-19 12:17 编辑

查找1.txt是否含有相同字符串
1.txt内容类似于如下格式:
CQABO-SWDL-F-12     150.200.0.12     7     PORTD8801
CQABO-SWDL-F-12     150.200.0.12     6     PORTD8802
CQABO-SWDL-F-12     150.200.0.12     5     PORTD8804
CQABO-SWDL-F-12     150.200.0.12     8     PORTD8805
CQABO-SWDL-F-12     150.200.0.12     13     PORTD8807
如下代码怎么也不行,大家帮忙看是什么问题,谢谢咯
  1. SETLOCAL ENABLEDELAYEDEXPANSION
  2. set a=0
  3. for /f "tokens=4 delims= " %%j in (1.txt) do (
  4. set /a a=!a!+1
  5. echo !a!
  6. echo %%j
  7. pause
  8. for /f "skip=!a! tokens=4 delims= " %%k in (1.txt) do (
  9. echo %%k
  10. if %%j==%%k ehco have two %%j
  11. )
  12. )
  13. ENDLOCAL
复制代码

作者: pcl_test    时间: 2015-8-26 13:53

本帖最后由 pcl_test 于 2015-8-26 14:37 编辑

第三方
  1. ::先下载http://batch-cn.qiniudn.com/tool/gawk.exe
  2. @gawk "{a[$4]++}END{for(i in a)if(a[i]>1)print i,a[i]}" "1.txt">"2.txt"
复制代码
bat+js,保存为bat运行
  1. @if(0)==(0) echo off&cscript -nologo -e:jscript "%~0"<"1.txt">"2.txt"&pause & exit/b&@end
  2. var a = {};
  3. while(!WScript.StdIn.AtEndOfStream) {
  4.     var m = WScript.StdIn.ReadLine().split(/\s+/);
  5.     a.hasOwnProperty(m[3])?(a[m[3]]++):a[m[3]]=1;
  6. }
  7. for (var i in a){if (a[i]>1)WSH.Echo(i+' '+a[i]);}
复制代码

作者: 回家路上    时间: 2015-8-26 15:08

  1. @echo off
  2. for /f "tokens=4 delims= " %%j in (1.txt) do (
  3. set /a #%%j+=1
  4. )
  5. for /f "tokens=1,2 delims=#=" %%i in ('set #') do echo;%%i    %%j个
  6. pause
复制代码

作者: 黎0130    时间: 2015-8-26 15:17

回复 3# 回家路上


    set /a #%%j+=1 怎么理解这句?谢谢
作者: 回家路上    时间: 2015-8-26 15:21

本帖最后由 回家路上 于 2015-8-26 15:25 编辑

回复 4# 黎0130


set /a 你用了肯定知道。
#%%j就是%%j的值的前面加上#,你肯定还是知道
+=你也知道。

所以你其实不知道的只是————第二个for循环的set # 什么意思?
了解一下set 命令估计一切就了然了
set #————将#开头的变量全都显示出来


哦,你上面没用”+=“。set /a a+=1就相当于set /a a=!a!+1
作者: 尘丶    时间: 2015-8-26 16:19

  1. @echo off&setlocal enabledelayedexpansion
  2. del b.txt>nul 2>nul
  3. del 重复内容.txt>nul 2>nul
  4. For /f "tokens=*" %%i in (1.txt) do (Findstr /x /c:"%%i" b.txt >nul 2>nul&&(echo %%i>>重复内容.txt)||
  5. (Echo %%i>>b.txt))
  6. del b.txt>nul 2>nul
  7. pause
复制代码

作者: 黎0130    时间: 2015-8-26 19:10

回复 5# 回家路上


    我懂你的意思了,谢谢!




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