Board logo

标题: [文本处理] [已解决]请教批处理比较每行,某两列数的大小 [打印本页]

作者: gcbgczhang    时间: 2021-6-15 18:19     标题: [已解决]请教批处理比较每行,某两列数的大小

本帖最后由 gcbgczhang 于 2021-7-31 14:19 编辑

如果大,就输出这一行
文件名:bt_k.txt
内容:
王孔发        211203196        3.3        37074        13941048863        是        王孔财        弟        14.65        211281103201020021J
赵立山        211203196        19.74        93344        18241085523        是        赵立山        本人        12.54        211281103201010154J
王洪发        211203196        22.87        61408        14704105488        是        王洪发        本人        10.79        211281103201020038J
黄秀英        211226196        4        11160        13030783523        是        李向坤        弟媳        13.9        211281103201010212J
...
要求:对比3列和9列,如果3列比9列大,就输出这一行。

赵立山        211203196        19.74        93344        18241085523        是        赵立山        本人        12.54        211281103201010154J
王洪发        211203196        22.87        61408        14704105488        是        王洪发        本人        10.79        211281103201020038J
...
用以下命令不行
  1. @echo off
  2. for /f "tokens=1-12 delims= " %%a in (bt_k.txt) do (
  3. if  %%c  GTR  %%i echo %%b>>超领.txt
  4. )
  5. for /f "delims=*" %%i in (超领.txt) do  findstr  "%%i" bt_k.txt >>超领祥细.txt
复制代码
我自己写了这个,有时准,有时不准,特别是有小数点时。不知道为啥,请教老师帮我弄一个。
作者: 路过    时间: 2021-6-15 19:08

小数比较大小需要把小数点对齐
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4. for /f "tokens=1-12" %%a in (bt_k.txt) do (
  5. call :Cpr %%c %%i
  6. if errorlevel 1 (echo;%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l)
  7. )
  8. )>超领祥细.txt
  9. endlocal
  10. pause
  11. exit
  12. :Cpr
  13. setlocal
  14. set n1=%1
  15. set n2=%2
  16. set x1=%n1:.=%
  17. set x2=%n2:.=%
  18. if %x1%==%n1% (set n1=%n1%.0)
  19. if %x2%==%n2% (set n2=%n2%.0)
  20. set sz=0000000000000000
  21. for %%z in (1 2) do (
  22. for /f "delims=. tokens=1,2" %%x in ("!n%%z!") do (set/a z%%z=%%x,x%%z=%%y)
  23. set str=!z%%z!fedcba9876543210&set/a len=0x!str:~15,1!
  24. for /f %%w in ("!len!") do (set z%%z=!sz:~0,-%%w!!z%%z!)
  25. set str=!x%%z!fedcba9876543210&set/a len=0x!str:~15,1!
  26. for /f %%w in ("!len!") do (set x%%z=!x%%z!!sz:~0,-%%w!)
  27. )
  28. if "!z1!.!x1!" gtr "!z2!.!x2!" (endlocal & exit /b 1)
  29. endlocal
  30. exit /b 0
复制代码

作者: went    时间: 2021-6-15 20:01

小数可以看成文件名进行分割比较
  1. @echo off & cd /d "%~dp0"
  2. (
  3. for /f "delims=" %%i in (bt_k.txt) do (
  4. for /f "tokens=3,9" %%a in ("%%i") do (
  5. if %%~na gtr %%~nb echo %%i
  6. if %%~na equ %%~nb (
  7. if not "%%~xa"=="" (
  8. if "%%~xb"=="" (
  9. echo %%i
  10. ) else (
  11. if %%~xa gtr %%~xb echo %%i
  12. )
  13. )
  14. )
  15. )
  16. )
  17. )>"超领.txt"
  18. pause&exit
复制代码

作者: newswan    时间: 2021-6-15 20:49

powershell
  1. $file = "a.txt"
  2. $fc = get-content $file
  3. $fc | foreach-object {
  4.     $a = (" " + $_) -split "\s+"
  5.     if ([single] $a[3] -gt [single] $a[9] )
  6.     {
  7.         write-host $_
  8.     }
  9. }
复制代码

作者: FOR    时间: 2021-6-16 23:54

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims="  %%i in (bt_k.txt) do (
  3. for /f "tokens=3,9 delims= " %%a in ("%%i") do (
  4. for /f "tokens=1,2 delims=." %%c in ("%%a") do (set sz=%%c&set sx=%%d)
  5. for /f "tokens=1,2 delims=." %%c in ("%%b") do (set jz=%%c&set jx=%%d)
  6. if !sz! gtr !jz! (echo %%i>>超领.txt) else (if !sx! gtr !jx! echo %%i>>超领.txt)
  7. )
  8. )
  9. pause
复制代码





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