Board logo

标题: [文本处理] [已解决]批处理如何提取文本中指定两个列的数字大小之差小于指定数值的行 [打印本页]

作者: pdanniel66    时间: 2013-8-28 04:22     标题: [已解决]批处理如何提取文本中指定两个列的数字大小之差小于指定数值的行

本帖最后由 pcl_test 于 2016-8-6 09:30 编辑

BAT如何計算文本內欄位數大小差異若小於10則輸出該行?
請問有以下文本 quota.txt,以第一行aaa為例,想列出第4個欄位值減第3個欄位值 , 即4000000-102504 若小於10, 或是第7個欄位值減第6個欄位值,即 5000-1 若小於10,

以上2者其中一個成立就將該行寫入 exceed_quota.txt 文本檔,謝謝 !

quota.txt文本

aaa       -- 102504 4000000 5000000                   1   5000  10000            
bbb       --    3999999 4000000 5000000                   4   5000  10000            
ccccc     -- 41631210 50000000 50001000               50001  50000  50010            
dddd      --      0 5000000 5900000                   0   5000   5100            
eeeeeee   -- 7899399 20000000 20001000                3837  15000  15100            
fff       --      0   1000   1024                   0   5000  10000            
ggggggggg -- 3388543 5000000 5001000               34999  35000  35100            
hh        --  17305 5000000 5001000                   2   5000   5100            
iiiiii    -- 804513 20000000 20001000                   0  10000  11000            
jjj       -- 4000003 4000000 5000000                  41   5000  10000            
kkk       --      0 5000000 5001000                   0   5000   5100   

輸出結果應該如下所示

bbb       -- 3999999 4000000 5000000                   4   5000  10000   
ccccc     -- 41631210 50000000 50001000               50001  50000  50010
ggggggggg -- 3388543 5000000 5001000               34999  35000  35100     
jjj       -- 4000003 4000000 5000000                  41   5000  10000         

[attach]6714[/attach]
作者: pdanniel66    时间: 2013-8-28 04:30

本帖最后由 pdanniel66 于 2013-8-28 07:32 编辑

只寫到以下內容,就卡住了 ,請協助 , Thanks.
  1. @echo off
  2. set v1=10
  3. for /f "tokens=1-8 delims= " %%i in (quota.txt) do (
  4. set /a diff1=%%l-%%k& set /a diff2=%%o-%%n
  5. if !diff1! lss !v1! (
  6. echo !diff1! >> exceed_quota.txt
  7. )
  8. else
  9. ...............
  10. )
  11. pause
复制代码

作者: Batcher    时间: 2013-8-28 11:23

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1-7*" %%a in (quota.txt) do (
  4.     set /a m=%%d-%%c
  5.     if !m! lss 10 (
  6.         echo %%a %%b %%c %%d %%e %%f %%g %%h
  7.     ) else (
  8.         set /a n=%%g-%%f
  9.         if !n! lss 10 (
  10.             echo %%a %%b %%c %%d %%e %%f %%g %%h
  11.         )
  12.     )
  13. ))>exceed_quota.txt
复制代码

作者: pdanniel66    时间: 2013-8-29 05:27

謝謝Batcher !
作者: pcl_test    时间: 2016-8-6 09:30

第三方
  1. gawk "$4-$3<10||$7-$6<10" "quota.txt">"result.txt"
复制代码





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