标题: [文本处理] [已解决]请教批处理比较每行,某两列数的大小 [打印本页]
作者: 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
...
用以下命令不行- @echo off
- for /f "tokens=1-12 delims= " %%a in (bt_k.txt) do (
- if %%c GTR %%i echo %%b>>超领.txt
- )
-
- for /f "delims=*" %%i in (超领.txt) do findstr "%%i" bt_k.txt >>超领祥细.txt
复制代码
我自己写了这个,有时准,有时不准,特别是有小数点时。不知道为啥,请教老师帮我弄一个。
作者: 路过 时间: 2021-6-15 19:08
小数比较大小需要把小数点对齐- @echo off
- setlocal enabledelayedexpansion
- (
- for /f "tokens=1-12" %%a in (bt_k.txt) do (
- call :Cpr %%c %%i
- if errorlevel 1 (echo;%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l)
- )
- )>超领祥细.txt
- endlocal
- pause
- exit
-
- :Cpr
- setlocal
- set n1=%1
- set n2=%2
- set x1=%n1:.=%
- set x2=%n2:.=%
- if %x1%==%n1% (set n1=%n1%.0)
- if %x2%==%n2% (set n2=%n2%.0)
- set sz=0000000000000000
- for %%z in (1 2) do (
- for /f "delims=. tokens=1,2" %%x in ("!n%%z!") do (set/a z%%z=%%x,x%%z=%%y)
- set str=!z%%z!fedcba9876543210&set/a len=0x!str:~15,1!
- for /f %%w in ("!len!") do (set z%%z=!sz:~0,-%%w!!z%%z!)
- set str=!x%%z!fedcba9876543210&set/a len=0x!str:~15,1!
- for /f %%w in ("!len!") do (set x%%z=!x%%z!!sz:~0,-%%w!)
- )
- if "!z1!.!x1!" gtr "!z2!.!x2!" (endlocal & exit /b 1)
- endlocal
- exit /b 0
复制代码
作者: went 时间: 2021-6-15 20:01
小数可以看成文件名进行分割比较- @echo off & cd /d "%~dp0"
- (
- for /f "delims=" %%i in (bt_k.txt) do (
- for /f "tokens=3,9" %%a in ("%%i") do (
- if %%~na gtr %%~nb echo %%i
- if %%~na equ %%~nb (
- if not "%%~xa"=="" (
- if "%%~xb"=="" (
- echo %%i
- ) else (
- if %%~xa gtr %%~xb echo %%i
- )
- )
- )
- )
- )
- )>"超领.txt"
- pause&exit
复制代码
作者: newswan 时间: 2021-6-15 20:49
powershell- $file = "a.txt"
- $fc = get-content $file
- $fc | foreach-object {
- $a = (" " + $_) -split "\s+"
- if ([single] $a[3] -gt [single] $a[9] )
- {
- write-host $_
- }
- }
复制代码
作者: FOR 时间: 2021-6-16 23:54
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (bt_k.txt) do (
- for /f "tokens=3,9 delims= " %%a in ("%%i") do (
- for /f "tokens=1,2 delims=." %%c in ("%%a") do (set sz=%%c&set sx=%%d)
- for /f "tokens=1,2 delims=." %%c in ("%%b") do (set jz=%%c&set jx=%%d)
- if !sz! gtr !jz! (echo %%i>>超领.txt) else (if !sx! gtr !jx! echo %%i>>超领.txt)
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |