Board logo

标题: [文本处理] [已解决]批处理如何保留文本中2010年份之后的行? [打印本页]

作者: KLL    时间: 2022-9-18 15:29     标题: [已解决]批处理如何保留文本中2010年份之后的行?

如何保留文本中2010年份之后的行,  2010年之前的行全删除

文本为Tab 格式分隔

文本内容如下:

TW1213        2022-09-30        21.000000
TW1215        2018-03-12        105019.000000
TW1216        2015-09-18        2287976.000000
TW1217        2021-02-11        30811.000000
TW1218        2022-09-13        12812.000000
TW1219        2017-04-18        21541.000000
TW1220        2006-09-22        13248.000000
TW1225        2022-09-13        1547.000000
TW1227        2009-02-05        58680.000000
TW1229        2001-09-13        157778.000000
TW1231        2022-07-01        5556.000000
TW1232        2003-09-13        1924.000000
TW1233        2004-09-13        4725.000000
TW1234        1999-09-07        22020.000000
TW1235        2007-05-13        156.000000
TW1236        2022-09-03        434.000000
作者: flashercs    时间: 2022-9-18 17:27

  1. @echo off
  2. cd /d "%~dp0"
  3. (
  4. for /f "tokens=1-2* delims= " %%A in (a.txt) do (
  5.   for /f "tokens=1 delims=-" %%D in ("%%B") do (
  6.     if %%B geq 2010 echo %%A %%B %%C
  7.   )
  8. )
  9. )>b.txt
  10. pause
复制代码

作者: hfxiang    时间: 2022-9-18 17:38

假设a.txt为输入文件,b.txt为输出文件,可在命令行正直接执行:
  1. (for /f "tokens=1-2*" %a in (a.txt) do @for /f "tokens=1 delims=-" %d in ("%b") do @if %d GTR 2010 @echo %a %b %c)>b.txt
复制代码
即可
作者: KLL    时间: 2022-9-18 21:12

运行后正确 谢谢先进指导
作者: qixiaobin0715    时间: 2022-9-19 09:36

  1. findstr /rc:" 20[12][0-9]-" a.txt>b.txt
复制代码

作者: Batcher    时间: 2022-9-19 09:38

回复 1# KLL
  1. findstr "2[0-9][1-9][0-9]-" 1.txt > 2.txt
复制代码

作者: hfxiang    时间: 2022-9-19 10:30

回复 1# KLL


经测试,单个for也能实现
  1. (for /f "tokens=1-2* delims=- " %%a in (a.txt) do if %%b GTR 2010 echo %%a %%b-%%c)>b.txt
复制代码

作者: WHY    时间: 2022-9-19 12:55

  1. findstr "\<20[1-9][0-9]- \<2[1-9][0-9][0-9]- \<[3-9][0-9][0-9][0-9]-" a.txt > b.txt
复制代码
大于等于2010的4位数年份,分三段:2010~2099, 2100~2999, 3000~9999
作者: qixiaobin0715    时间: 2022-9-19 15:04

回复 8# WHY
\<用的妙,避开了空白字符的麻烦。
作者: WHY    时间: 2022-9-19 19:12

回复 9# qixiaobin0715


    这种办法只能作为备选方案。如果要匹配1986~2022年之间的年份,要分很多段,远没有 for + if 来的直接。
作者: qixiaobin0715    时间: 2022-9-20 09:40

回复 10# WHY
确实如此,使用判断语句逻辑上也较为清晰。不过我还是想试试findstr,1986~2022之间可分为4段:
  1. findstr "\<198[6-9]- \<199[0-9]- \<20[01][0-9]- \<202[0-2]-" a.txt>b.txt
复制代码





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