标题: [文本处理] [已解决]批处理如何保留文本中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
- @echo off
- cd /d "%~dp0"
- (
- for /f "tokens=1-2* delims= " %%A in (a.txt) do (
- for /f "tokens=1 delims=-" %%D in ("%%B") do (
- if %%B geq 2010 echo %%A %%B %%C
- )
- )
- )>b.txt
- pause
复制代码
作者: hfxiang 时间: 2022-9-18 17:38
假设a.txt为输入文件,b.txt为输出文件,可在命令行正直接执行:- (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
- findstr /rc:" 20[12][0-9]-" a.txt>b.txt
复制代码
作者: Batcher 时间: 2022-9-19 09:38
回复 1# KLL - findstr "2[0-9][1-9][0-9]-" 1.txt > 2.txt
复制代码
作者: hfxiang 时间: 2022-9-19 10:30
回复 1# KLL
经测试,单个for也能实现- (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
- 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段:- 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 |