[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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: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)
复制代码
1

评分人数

QQ 33892006

TOP

  1. gawk "{if(!(substr($1,2)+0>100 && $5<5000))print}" "a.txt">"b.txt"
复制代码
1

评分人数

提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 keshun 于 2019-4-13 16:17 编辑

回复 3# zaqmlp


    十分感谢!也不知怎么回事,我系统win7 32不支持逻辑非"!",gawk与sed都对"!"不支持无效果,造成代码输出的是要删除的部分。

TOP

回复 4# keshun
仅此一句单独运行会吗?
我猜你开了延迟setlocal enabledelayedexpansion
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 5# zaqmlp


    我试了下,是这个原因,但变量延迟这段代码又得用,不然其他代码也会出错,这样形成冲突了。能否帮我改进下,不要用"!”谢谢。

TOP

回复 6# keshun

没赞助,没动力呀
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 6# keshun


    试试二楼的代码,保存为bat.里面的文件名改下
QQ 33892006

TOP

返回列表