标题: [文本处理] [己解决]批处理怎样删除符合两个指定条件的行? [打印本页]
作者: keshun 时间: 2019-4-13 10:41 标题: [己解决]批处理怎样删除符合两个指定条件的行?
本帖最后由 keshun 于 2019-4-13 17:05 编辑
买83 5.25 -2.6876 11 1600
买93 5.223 -3.1881 14 6487
买100 5.2 -3.6144 18 4514
买125 5.15 -4.5412 12 2527
买144 5.11 -5.2826 11 2886
买148 5.1 -5.4680 29 14495
买161 5.08 -5.8387 14 5877
卖1 5.396 0.0185 11 1363
卖39 5.45 1.0194 16 2032
卖75 5.5 1.9462 34 7534
卖115 5.596 3.7256 12 975
卖118 5.6 3.7998 15 6610
卖155 5.7 5.6533 11 1895
卖175 5.8 7.5069 12 5949
删除符合$1>100与$5<5000的行,结果如下:
买83 5.25 -2.6876 11 1600
买93 5.223 -3.1881 14 6487
买148 5.1 -5.4680 29 14495
买161 5.08 -5.8387 14 5877
卖1 5.396 0.0185 11 1363
卖39 5.45 1.0194 16 2032
卖75 5.5 1.9462 34 7534
卖118 5.6 3.7998 15 6610
卖175 5.8 7.5069 12 5949
求代码,删除符合两个指定条件的行,谢谢!!
作者: yhcfsr 时间: 2019-4-13 14:22
本帖最后由 yhcfsr 于 2019-4-13 14:53 编辑
$1,$5代表是什么?
你又没用gawk,突然出现这些东西,岂非莫名其妙?
切记先备份源文件- @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
-
- $file='tt.txt';#文件名
- [System.Collections.ArrayList] $result=@();
- foreach($line in [io.file]::ReadAllLines($file,[text.encoding]::Default))
- {
- if($line -match '^\D*(\d+)\D.*\D(\d+)$'){
- #$Matches[1]+','+$Matches[2]
-
- if( ([int]$Matches[1] -gt 100) -and ([int]$Matches[2] -lt 5000)){continue;}
- [void] $result.Add($line)
- }
- }
- [io.file]::WriteAllLines($file,$result,[text.encoding]::Default)
复制代码
作者: zaqmlp 时间: 2019-4-13 15:24
- gawk "{if(!(substr($1,2)+0>100 && $5<5000))print}" "a.txt">"b.txt"
复制代码
作者: keshun 时间: 2019-4-13 16:10
本帖最后由 keshun 于 2019-4-13 16:17 编辑
回复 3# zaqmlp
十分感谢!也不知怎么回事,我系统win7 32不支持逻辑非"!",gawk与sed都对"!"不支持无效果,造成代码输出的是要删除的部分。
作者: zaqmlp 时间: 2019-4-13 16:13
回复 4# keshun
仅此一句单独运行会吗?
我猜你开了延迟setlocal enabledelayedexpansion
作者: keshun 时间: 2019-4-13 16:26
回复 5# zaqmlp
我试了下,是这个原因,但变量延迟这段代码又得用,不然其他代码也会出错,这样形成冲突了。能否帮我改进下,不要用"!”谢谢。
作者: zaqmlp 时间: 2019-4-13 16:42
回复 6# keshun
没赞助,没动力呀
作者: yhcfsr 时间: 2019-4-13 16:51
回复 6# keshun
试试二楼的代码,保存为bat.里面的文件名改下
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |