找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 76621|回复: 16

[文本处理] [已解决]批处理如何提取文本中第二列的数字数据小于之后其他列的行

[复制链接]
发表于 2017-3-15 02:16:01 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-3-19 16:25 编辑

求助如何筛选按我要求的行的数据txt
txt格式样式
                 第二行数   第三行数    第四行数    第五行数   第六行数
603022        111        666        777        888        999
300017        811        666        777        888        999
000002        555        666        777        888        999
000877        999        666        777        888        999
600760        888        666        777        888        999
300304        333        666        777        888        999
603300        777        666        777        888        999
300104        700        666        777        888        999
002164        800        666        777        888        999
600577        900        666        777        888        999
我想知道
如何筛选出  第列行数小于第三列数 同时 第二列数也小于第四列数 同时 第二列数也小于第五行数 同时 第二列数也小于第六列数
意思也就是只留下 第二列数 比之后几列数字都小的行  这个行一共有10行  我搞了个例子 只搞了6行
麻烦知道的朋友告诉我下 谢谢


筛选剩下的 就应该是
603022        111        666        777        888        999
000002        555        666        777        888        999
300304        333        666        777        888        999
就剩下这3行了

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2017-3-15 12:42:28 | 显示全部楼层
有没有知道的兄弟啊 告诉我下 谢谢拉
发表于 2017-3-15 12:49:33 | 显示全部楼层
回复 2# 2359123467

你是说的第二"列"吧 ?但是我看你第二列没有比后面的任何一列更小。
 楼主| 发表于 2017-3-15 23:32:08 | 显示全部楼层
回复 3# taofan712


    恩  txt中就是打个比方  我现在去修改修改
发表于 2017-3-16 00:24:01 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('type ".\新建文本文档.txt"')do (
  3. set "loop=%%i"
  4. for /l %%n in (1,1,11)do if defined loop for /f "tokens=1,* delims=分割符" %%y in ("!loop!")do set "loop=%%z"&set "loop_%%~nn=%%y"
  5. set "_if="
  6. for /l %%n in (3,1,6)do if !loop_2! lss !loop_%%n! set "_if=!_if!%%n"
  7. if /i "!_if!"=="3456" echo,%%i
  8. )
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
taofan712 + 1 好难看你出一次手。

查看全部评分

发表于 2017-3-16 00:25:41 | 显示全部楼层
本帖最后由 taofan712 于 2017-3-16 00:27 编辑

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1-10" %%a in (a.txt) do (
  3.   (echo;%%c
  4.   echo;%%d
  5.   echo;%%e
  6.   echo;%%f
  7.   echo;%%g
  8.   echo;%%h
  9.   echo;%%i
  10.   echo;%%j
  11.   )>t1.tmp
  12.   sort t1.tmp>t2.tmp
  13.   set/p aa=<t2.tmp
  14.   for /f %%x in ("!aa!") do (
  15.     if %%b lss %%x echo;%%a  %%b  %%c  %%d  %%e  %%f  %%g %%h %%i %%j
  16.   )>>newa.txt
  17. )
  18. del /f /q t?.tmp
  19. pause
复制代码
 楼主| 发表于 2017-3-16 01:24:37 | 显示全部楼层
回复 5# /zhqsystem/zhq


   谢谢 测试可用  就是能不能帮上筛选出来的搞个b.txt结果存放  万分谢谢
 楼主| 发表于 2017-3-16 01:25:03 | 显示全部楼层
回复 6# taofan712


    这个测试了 不能用 但是也非常感谢您
发表于 2017-3-16 08:12:26 | 显示全部楼层
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"a.txt">"b.txt"&pause&exit
  2. while(!WSH.StdIn.AtEndOfStream){
  3.     var line=WSH.StdIn.ReadLine(), arr=line.split(/\s+/), len=arr.length;
  4.     if(len>2){
  5.         var n=0;for(var i=2;i<len;i++){if(1*arr[1]<arr[i])n++}
  6.         if(n==len-2)WSH.echo(line);
  7.     }
  8. }
复制代码
发表于 2017-3-16 09:03:09 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3.         set m=&set "n="&set "s="
  4.         for %%a in (%%i) do (
  5.                 if defined m (
  6.                         if defined n (
  7.                                 if !n! gtr %%a set s=1
  8.                         ) else set n=%%a
  9.                 ) else set m=%%a
  10.         )
  11.         if not defined s echo;%%i
  12. ))>b.txt
  13. pause & exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
taofan712 + 1 乐于助人

查看全部评分

发表于 2017-3-16 09:45:50 | 显示全部楼层
回复 8# 2359123467


有什么报错信息?
还是得到的结果跟你的预期有什么差异?
请给出详细的反馈,否则人家也不知道如何继续帮你改代码。
发表于 2017-3-16 09:49:36 | 显示全部楼层
回复 8# 2359123467


    不会有错,我是按照10列来写,并测试过的。当然,他们的脚本比我的好太多了。
发表于 2017-3-16 11:02:09 | 显示全部楼层
本帖最后由 pcl_test 于 2017-3-16 12:44 编辑

回复 12# taofan712

因为楼主测试的是他自己的6列数据,那么你处理10列的代码就会输出空行,另外直接sort排序获取其他列中的最小值也不妥,如xx 12 141 101 11 130
这类问题用纯批并不能做到很通用,要考虑的问题较多,如以整数型比较,会有有效范围的限制,以字符串比较,会有排序的问题,如果还有负数和小数,要处理的问题就更多了
  1. @powershell "gc '文本.txt'|%%{$a=$_ -split '\s+';$b=($a[2..($a.count-1)]|measure -min).minimum;if(1*$a[1] -lt $b){$_}}"&pause
复制代码
发表于 2017-3-16 11:28:10 | 显示全部楼层
回复 13# pcl_test


    感谢版主指导
发表于 2017-3-16 11:45:44 | 显示全部楼层
  1. @echo off
  2. (for /f "tokens=1,2*" %%a in (a.txt) do (
  3.     setlocal
  4.     for %%i in (%%c) do if %%b geq %%i set f=1
  5.     if not defined f echo %%a        %%b        %%c
  6.     endlocal
  7. ))>b.txt
  8. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:50 , Processed in 0.011295 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表