Board logo

标题: [文本处理] [己解决]批处理怎样删除符合两个指定条件的行? [打印本页]

作者: 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,突然出现这些东西,岂非莫名其妙?
切记先备份源文件
  1. @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
  2. $file='tt.txt';#文件名
  3. [System.Collections.ArrayList] $result=@();
  4. foreach($line in [io.file]::ReadAllLines($file,[text.encoding]::Default))
  5. {
  6.     if($line -match '^\D*(\d+)\D.*\D(\d+)$'){
  7.         #$Matches[1]+','+$Matches[2]
  8.         
  9.         if( ([int]$Matches[1] -gt 100) -and ([int]$Matches[2] -lt 5000)){continue;}
  10.         [void] $result.Add($line)
  11.     }
  12. }
  13. [io.file]::WriteAllLines($file,$result,[text.encoding]::Default)
复制代码

作者: zaqmlp    时间: 2019-4-13 15:24

  1. 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