Board logo

标题: [文本处理] 批处理如何删除TXT多个字符串指定行? [打印本页]

作者: 66899981    时间: 2024-10-26 23:58     标题: 批处理如何删除TXT多个字符串指定行?

|4| |20| |26| |70| |07|  。。。 后面可能有6000个这样格式的数据,只要TXT内容包含|4|这种格式的就删除整行
  1. @echo off
  2. for %%1 in (data.txt)do (findstr /v  "|4| |20| |26| |70| |07|" "%%1">#
  3. move "#" "%%1">nul 2>nul
  4. )
复制代码
之前这么写 但是|4| |20| |26| |70| |07|这样的格式有限制 例如100个以上就不行了
作者: aloha20200628    时间: 2024-10-27 09:29

本帖最后由 aloha20200628 于 2024-10-27 11:03 编辑

回复 1# 66899981

批处的胃口限于每行8K,无须让findstr喂食了...
  1. echo off &findstr /lv "|4|" data.txt>0.0
  2. move /y 0.0 data.txt
  3. pause&exit/b
复制代码
或改用 find 亦可...
  1. echo off &find /v "|4|" data.txt|more +2>0.0
  2. move /y 0.0 data.txt
  3. pause&exit/b
复制代码

作者: 66899981    时间: 2024-10-27 10:59

回复  66899981
aloha20200628 发表于 2024-10-27 09:29



    非常感谢您,这个|04| |05|对比的非常多 这种写法 运行对比数据少的少可以 只要超出一定额度 就不行了例如|05|。。。。|10000|的对比执行就无效了
作者: aloha20200628    时间: 2024-10-27 11:10

本帖最后由 aloha20200628 于 2024-10-27 11:13 编辑

回复 3# 66899981

直接用 findstr 的 ‘逻辑或’ 匹配模式,可删除包含 |4| 或 |5| 或 |10000| 的数据行...
  1. echo off &findstr /lv "|4| |05| |10000|" data.txt>0.0
  2. move /y 0.0 data.txt
  3. pause&exit/b
复制代码

作者: aloha20200628    时间: 2024-10-27 11:27

本帖最后由 aloha20200628 于 2024-10-27 11:29 编辑

回复 3# 66899981

或用以下方法,把 一长串匹配数 填入 for...() 里,遍历提取逐一删除...
  1. echo off & for %%k in (4 20 26 70 07) do (
  2.    find /v "|%%k|" data.txt|more +2>0.0
  3.    move /y 0.0 data.txt
  4. )
  5. pause&exit/b
复制代码

作者: 77七    时间: 2024-10-27 11:31

楼主是不是想删除 包含 |数字| 的行?
  1. findstr /v "|[0-9][0-9]*|" data.txt > out.txt
复制代码

作者: aloha20200628    时间: 2024-10-27 11:47

本帖最后由 aloha20200628 于 2024-10-27 21:46 编辑

回复 3# 66899981

又是一个猜谜帖...似乎是用findstr匹配多个 ‘|n|’ 组成的整个字符串长度超限了...

作者: 66899981    时间: 2024-10-27 11:56

本帖最后由 66899981 于 2024-10-27 11:57 编辑
回复  66899981

或用以下方法,把 一长串匹配数 填入 for...() 里,遍历提取逐一删除...
aloha20200628 发表于 2024-10-27 11:27



    echo off &findstr /lv "|000004| |000020| |000026| |000070| |000407| |000408| |000419| |000421| |000503| |000533| |000545| |000548| |000559| |000593| |000600| |000619| |000655| |000657| |000661| |000668| |000670| |000681| |000698| |000701| |000703| |000708| |000722| |000728| |000729| |000733| |000735| |000751| |000752| |000753| |000788| |000789| |000809| |000810| |000812| |000815| |000816| |000819| |000821| |000822| |000877| |000883| |000888| |000890| |000905| |000906| |000912| |000915| |000917| |000929| |000930| |000948| |000953| |000960| |000968| |000972| |000985| |000997| |000999| |001203| |001205| |001216| |001218| |001301| |001332| |001380| |002011| |002015| |002028| |002029| |002038| |002039| |002040| |002055| |002063| |002064| |002075| |002080| |002085| |002092| |002093| |002098| |002105| |002107| |002121| |002132| |002138| |002148| |002150| |002158| |002162| |002165| |002171| |002178| |002197| |002202| |002212| |002218| |002219| |002223| |002226| |002236| |002253| |002255| |002262| |002278| |002283| |002284| |002298| |002299| |002305| |002312| |002327| |002332| |002338| |002344| |002347| |002374| |002391| |002415| |002418| |002419| |002424| |002429| |002434| |002436| |002437| |002441| |002452| |002457| |002462| |002475| |002480| |002492| |002532| |002534| |002539| |002552| |002566| |002571| |002574| |002577| |002578| |002582| |002609| |002611| |002612| |002630| |002644| |002645| |002670| |002672| |002676| |002686| |002690| |002706| |002709| |002728| |002735| |002758| |002772| |002780| |002785| |002789| |002808| |002855| |002870| |002876| |002880| |002885| |002902| |002908| |002909| |002911| |002982| |002988| |003005| |003012| |003022| |003029| |003035| |003040| |200020| |200026| |200468| |300003| |300017| |300022| |300030| |300040| |300053| |300059| |300070| |300073| |300087| |300111| |300115| |300122| |300130| |300138| |300142| |300146| |300147| |300168| |300173| |300174| |300177| |300187| |300190| |300193| |300196| |300208| |300213| |300220| |300221| |300265| |300270| |300271| |300289| |300291| |300300| |300303| |300320| |300322| |300328| |300348| |300351| |300358| |300368| |300385| |300393| |300400| |300404| |300412| |300413| |300439| |300457| |300474| |300475| |300500| |300513| |300527| |300533| |300546| |300553| |300553| |300559| |300569| |300584| |300592| |300595| |300601| |300603| |300618| |300625| |300632| |300633| |300634| |300661| |300676| |300679| |300686| |300693| |300700| |300701| |300712| |300722| |300726| |300736| |300738| |300766| |300770| |300774| |300812| |300850| |300859| |300882| |300883| |300889| |300895| |300922| |300938| |300952| |300953| |300958| |300961| |300964| |300992| |301015| |301023| |301038| |301039| |301069| |301072| |301089| |301102| |301118| |301130| |301138| |301148| |301162| |301176| |301182| |301229| |301236| |301262| |301282| |301293| |301305| |301312| |301328| |301362| |301397| |301448| |301508| |301511| |301538| |301568| |400061| |400062| |430008| |430023| |430243| |430512| |430568| |430581| |600055| |600056| |600059| |600062| |600063| |600084| |600087| |600095| |600099| |600105| |600120| |600141| |600161| |600188| |600199| |600237| |600269| |600282| |600300| |600302| |600313| |600327| |600332| |600352| |600361| |600365| |600395| |600397| |600408| |600409| |600422| |600429| |600433| |600444| |600467| |600470| |600476| |600480| |600498| |600502| |600503| |600519| |600520| |600523| |600535| |600546| |600549| |600551| |600561| |600562| |600566| |600575| |600578| |600584| |600594| |600595| |600602| |600633| |600658| |600664| |600666| |600679| |600693| |600711| |600718| |600725| |600740| |600745| |600749| |600750| |600771| |600777| |600787| |600797| |600801| |600803| |600805| |600812| |600826| |600828| |600839| |600841| |600850| |600864| |600869| |600872| |600874| |600881| |600894| |600955| |600963| |600965| |600970| |600980| |600993| |601011| |601088| |601208| |601268| |601368| |601369| |601399| |601598| |601619| |601633| |601666| |601668| |601718| |601777| |601799| |601825| |601918| |601956| |601965| |601975| |603006| |603012| |603021| |603023| |603035| |603041| |603078| |603079| |603086| |603095| |603125| |603128| |603136| |603156| |603163| |603181| |603182| |603183| |603186| |603196| |603216| |603219| |603228| |603231| |603275| |603311| |603396| |603408| |603501| |603506| |603516| |603529| |603535| |603536| |603568| |603586| |603595| |603600| |603601| |603610| |603656| |603658| |603660| |603688| |603697| |603699| |603725| |603727| |603788| |603813| |603817| |603909| |603916| |603919| |603931| |603931| |603948| |603976| |603983| |603986| |605001| |605005| |605009| |605018| |605058|" data.txt>0.0
move /y 0.0 data.txt
pause&exit/b

还是不行 DATA.TXT文件里删除不了关键词整行  数据太多就不行了  以上的数据是可以删除的 但是关键词再多些就不行了
作者: 66899981    时间: 2024-10-27 11:58

楼主是不是想删除 包含 |数字| 的行?
77七 发表于 2024-10-27 11:31



    就是删除指定关键词后删除关键词的整行数据,但是目前是很多方法都用了,只要关键词多了之后就不管用了
作者: 77七    时间: 2024-10-27 12:05

回复 9# 66899981


   把关键字写入 keywords.txt 每行一个
  1. findstr /vg:"keywords.txt" "data.txt" > "out.txt"
复制代码

作者: 66899981    时间: 2024-10-27 12:05

回复  66899981

又是一个猜谜...似乎是用findstr匹配多个 ‘|n|’ 组成的整个字符串长度超限了,如是就 ...
aloha20200628 发表于 2024-10-27 11:47



    你好,请问这种如何能解决呢?是超长限制了
作者: 66899981    时间: 2024-10-27 12:10

回复 11# 77七

感谢您的答复,目前就是字符串超出限制了  所以如何解决这个问题呢?
作者: 77七    时间: 2024-10-27 12:19

回复 12# 66899981


   keywords.txt
  1. |000004|
  2. |000020|
  3. |000026|
复制代码


什么超限制了?
作者: 66899981    时间: 2024-10-27 12:25

回复  66899981


   keywords.txt

什么超限制了?
77七 发表于 2024-10-27 12:19



    就是对比的数据太多了
作者: 77七    时间: 2024-10-27 12:29

回复 14# 66899981


   说可能是说不清楚了...请提供一个样本吧,处理前.txt 处理后.txt 关键词.txt,上传到网盘
作者: 66899981    时间: 2024-10-27 13:06

回复  66899981


   keywords.txt

什么超限制了?
77七 发表于 2024-10-27 12:19



    用两个文本对比也可以,不知道对比的文本数据太多是不是也会超长限制,并在原有的DATA.TXT里直接删除关键词的行 不需要新建文档  谢谢您
作者: aloha20200628    时间: 2024-10-27 13:16

本帖最后由 aloha20200628 于 2024-10-27 16:03 编辑

回复 11# 66899981

以下代码存为 test.bat 运行,把整个匹配数字长串 |4| |20| |26| |70| |07| ... 存入 “匹配数超长字符串.txt” 这个单行文件,与 test.bat 和 data.txt 同目录即可...
运行结果会覆写源 data.txt,建议先备份源文件。
  1. @set @x=1 /* &@echo off
  2. type "匹配数超长字符串.txt"|cscript /e:jscript "%~f0" "data.txt"
  3. pause&exit/b */
  4. kwline=WSH.stdin.readall().replace('\r\n','').replace(/\|/g,'\\|');
  5. v=WSH.arguments, fso=WSH.createObject('Scripting.FileSystemObject');
  6. fp=fso.OpenTextFile(v(0),1), alltxt=fp.readall(), fp.close(), reg='/'+kwline+'/ig';
  7. fp=fso.OpenTextFile(v(0),2,true), fp.write(alltxt.replace(eval(reg),'')), fp.close(), WSH.quit();
复制代码

作者: Five66    时间: 2024-10-27 13:51

啊 ,为啥要这么长的???
作者: 66899981    时间: 2024-10-27 14:24

回复  66899981

以下代码存为 test.bat 运行,把整个匹配数字长串 |4| |20| |26| |70| |07| ... 存入 “ ...
aloha20200628 发表于 2024-10-27 13:16



    提示Microsoft  JScript 编译错误;缺少 '/’
作者: aloha20200628    时间: 2024-10-27 15:59

本帖最后由 aloha20200628 于 2024-10-27 16:17 编辑

回复 19# 66899981

简单作了一个测试》用8楼示例中的510组匹配数超长字符串
|000004| |000020| ... |605018| |605058|
直接写入(前后没有空格)单行文件 "匹配数超长字符串.txt",再用这个 510 组匹配数超长字符串 替换如下 “data.txt” 文件中包含的 * 字符:
  1. abc*xyz
  2. *xyz
  3. abc*
  4. *
  5. 123456
复制代码
运行17楼给出的 test.bat,结果是》源文件 data.txt 变为如下内容:
  1. abcxyz
  2. xyz
  3. abc
  4. 123456
复制代码
请楼主确认上述测试方法及其结果与要求是否一致?

作者: 66899981    时间: 2024-10-27 16:30

本帖最后由 66899981 于 2024-10-27 16:32 编辑
回复  66899981

简单作了一个测试》用8楼示例中的510组匹配数超长字符串
|000004| |000020| ... |6050 ...
aloha20200628 发表于 2024-10-27 15:59



要检查的关键词:   |000004| |000020| |000026| |000070| |000407| |000408| |000419| |000421| |000503| |000533| |000545| |000548| |000559| |000593| |000600| |000619| |000655| |000657| |000661| |000668| |000670| |000681|

以下为 data.txt   要检查的关键词 例如|000004| 符合就把所有这样的数据整行删除

0|000004|202|北京中关村并购母基金投资管理中心(有限合伙)-北京中关村并购母基金投资中心(有限合伙)|772.97|不变|6.12|89973777.84|2024-08-23
0|000004|203|深圳市睿鸿置业发展有限公司|401.59|不变|3.18|46745471.76|2024-08-23
0|000004|204|珠海横琴普源科技合伙企业(有限合伙)|335.53|不变|2.66|39055761.84|2024-08-23
0|000004|205|刘连瑞|131.79|增加 34.94万股 0.26%|1.04|15340356|2024-08-23
0|000004|206|李映彤|131.61|不变|1.04|15319404|2024-08-23
0|000004|207|刘时连|110.48|新进|0.87|12859872|2024-08-23
0|000004|208|叶卓凡|107.25|新进|0.85|12484225.92|2024-08-23
0|000004|209|王韵|98.68|新进|0.78|11486352|2024-08-23
0|000004|210|徐斐美|84.96|新进|0.67|9889344|2024-08-23
0|000027|201|深圳市人民**国有资产监督管理委员会|208885.68|不变|43.91|15248654508.6|2024-08-23
0|000027|202|华能国际电力股份有限公司|119009|不变|25.02|8687656934.3|2024-08-23
0|000027|203|深圳市资本运营集团有限公司|22977.62|不变|4.83|1677366311.1|2024-08-23
0|000027|204|香港中央结算有限公司|7476.97|增加 1419.71万股 0.3%|1.57|545818795.4|2024-08-23
0|000027|205|深圳市亿鑫投资有限公司|5356.01|不变|1.13|390988963.6|2024-08-23
0|000027|206|三峡资本控股有限责任公司|3746.17|新进|0.79|273470278.6|2024-08-23
0|000027|207|中国农业银行股份有限公司-中证500交易型开放式指数证券投资基金|1712.33|增加 41.48万股 0.01%|0.36|125000009.7|2024-08-23
0|000027|208|广东电力发展股份有限公司|1512|不变|0.32|110376000|2024-08-23
0|000027|209|深圳市投资控股有限公司|677.35|不变|0.14|49446374.8|2024-08-23
0|000027|210|中国人寿保险股份有限公司-传统-普通保险产品-005L-CT001沪|614.09|减少 -155.38万股 -0.03%|0.13|44828570|2024-08-23


结果就是 DATA.TXT

0|000027|201|深圳市人民**国有资产监督管理委员会|208885.68|不变|43.91|15248654508.6|2024-08-23
0|000027|202|华能国际电力股份有限公司|119009|不变|25.02|8687656934.3|2024-08-23
0|000027|203|深圳市资本运营集团有限公司|22977.62|不变|4.83|1677366311.1|2024-08-23
0|000027|204|香港中央结算有限公司|7476.97|增加 1419.71万股 0.3%|1.57|545818795.4|2024-08-23
0|000027|205|深圳市亿鑫投资有限公司|5356.01|不变|1.13|390988963.6|2024-08-23
0|000027|206|三峡资本控股有限责任公司|3746.17|新进|0.79|273470278.6|2024-08-23
0|000027|207|中国农业银行股份有限公司-中证500交易型开放式指数证券投资基金|1712.33|增加 41.48万股 0.01%|0.36|125000009.7|2024-08-23
0|000027|208|广东电力发展股份有限公司|1512|不变|0.32|110376000|2024-08-23
0|000027|209|深圳市投资控股有限公司|677.35|不变|0.14|49446374.8|2024-08-23
0|000027|210|中国人寿保险股份有限公司-传统-普通保险产品-005L-CT001沪|614.09|减少 -155.38万股 -0.03%|0.13|44828570|2024-08-23


多谢哥们的帮助
作者: aloha20200628    时间: 2024-10-27 17:26

本帖最后由 aloha20200628 于 2024-10-27 18:00 编辑

回复 21# 66899981

其实就是5楼代码的算法,只不过 for...() 括号里塞不进超长字符串而已,如下版本应该可以了(先借用js切碎超长字符串再回喂5楼代码,当然也可用js一锅烩 ),已用21楼示例文件测试通过...
以下代码存为 test.bat 运行,把整个匹配数超长字符串 |000004| |000020|...|605018| |605058| 存入 “匹配数超长字符串.txt” 这个单行文件,与 test.bat 和 data.txt 同目录即可... 运行结果会覆写源 data.txt,建议先备份源文件。
  1. @set @x=1 /* &@echo off
  2. type "匹配数超长字符串.txt"|cscript /e:jscript "%~f0">0.1
  3. for /f "delims=" %%k in (0.1) do (
  4. find /v "%%k" data.txt|more +2>0.0
  5. move /y 0.0 data.txt
  6. )>nul 2>nul
  7. del/q "0.1"&pause&exit/b */
  8. WSH.echo(WSH.stdin.readall().replace('\r\n','').replace(/ /g,'\r\n')), WSH.quit();
复制代码

作者: 66899981    时间: 2024-10-27 19:11

回复 22# aloha20200628


    兄弟你好,这个也太慢了  都快卡死了
作者: aloha20200628    时间: 2024-10-27 21:26

本帖最后由 aloha20200628 于 2024-10-28 11:09 编辑

回复 23# 66899981

重体力劳动让 js 一锅烩吧,比22楼版本明显提速...
  1. @set @x=1 /* &@echo off
  2. type "data.txt"|cscript /nologo /e:jscript "%~f0" "匹配数超长字符串.txt">0.0
  3. move /y 0.0 data.txt >nul 2>nul
  4. pause&exit/b */
  5. v=WSH.arguments, fso=WSH.createObject('Scripting.FileSystemObject');
  6. fp=fso.OpenTextFile(v(0),1), akw=fp.readall().replace(/\r\n/g,'').split(' '), fp.close();
  7. ws=WSH.stdin, lines='';
  8. while (!ws.atendofstream) {
  9.     line=ws.readline();
  10.     for (cut=0,n=0,l=akw.length; n<l; n++)
  11.         if (line.indexOf(akw[n]) != -1) { cut=1; break; }
  12.     if (cut==0) lines+=line+'\r\n';
  13. }
  14. WSH.echo(lines), WSH.quit();
复制代码

作者: 66899981    时间: 2024-10-27 22:22

回复  66899981

重体力劳动让 js 一锅烩吧,比22楼版本明显提速...
aloha20200628 发表于 2024-10-27 21:26



     Microsoft JScript 运行时错误: 文件未找到

早点睡吧兄弟 非常感谢您的帮助
作者: aloha20200628    时间: 2024-10-27 22:49

本帖最后由 aloha20200628 于 2024-10-27 22:53 编辑

回复 25# 66899981

此报错说明》在当前目录下没有找到 "匹配数超长字符串.txt" 这个文件

... 把整个匹配数超长字符串 |000004| |000020|...|605018| |605058| 存入 “匹配数超长字符串.txt” 这个单行文件,与 test.bat 和 data.txt 同目录,运行结果会覆写源 data.txt ...

作者: 66899981    时间: 2024-10-28 08:20

本帖最后由 66899981 于 2024-10-28 08:31 编辑
回复  66899981

此报错说明》在当前目录下没有找到 "匹配数超长字符串.txt" 这个文件

... 把整个匹配 ...
aloha20200628 发表于 2024-10-27 22:49



  匹配数超长字符串.txt
  数据格式 |000004| |000020| |000026| |000070| |000407| 每行一个每个后面都有一个空格   不知道是哪里不对呢?  每行一个
作者: 66899981    时间: 2024-10-28 08:24

回复 26# aloha20200628


过程试图写入的通道不存在。

DATA.TXT 里面就被替换成  Microsoft (R) Windows Script Host Version 5.812
版权所有(C) Microsoft Corporation。保留所有权利。
作者: aloha20200628    时间: 2024-10-28 08:43

本帖最后由 aloha20200628 于 2024-10-28 09:01 编辑

回复 27# 66899981

须把整个匹配数超长字符串 |000004| |000020| ... |605018| |605058|
直接写入(前后没有空格)单行文件
"匹配数超长字符串.txt"... 这是一个单行文件,不要分行!
用21楼的22组匹配数写入单行文件 "匹配数超长字符串.txt",再用2楼的示例文件 "data.txt",运行24楼代码,已经测试通过,获得了与楼主要求完全一致的结果...

作者: 66899981    时间: 2024-10-28 09:25

本帖最后由 66899981 于 2024-10-28 09:32 编辑
回复  66899981

须把整个匹配数超长字符串 |000004| |000020| ... |605018| |605058|
直接写入(前后没 ...
aloha20200628 发表于 2024-10-28 08:43



DATA.TXT 格式

0|000002|201|深圳市地铁集团有限公司|324281.08|不变|27.2|22472678781.63|2024-08-31
0|000002|202|HKSCC NOMINEES LIMITED|220632.03|减少 -2.98万股 0%|18.5|15289799581.98|2024-08-31

匹配数超长字符串 格式

|000158| |000403| |000519| |000520| |000543| |000571| |000584| |000628| |000692| |000793| |000795| |000807| |000869| |000878| |001226| |001277| |001328| |001333| |001338| |002006| |002017| |002023| |002057| |002058| |002086| |002101| |002102| |002163| |002193| |002195| |002205| |002246| |002251| |002265| |002267| |002324| |002328| |002346| |002348| |002409| |002428| |002442| |002476| |002494| |002495| |002496| |002501| |002533| |002564| |002585| |002591| |002615| |002617| |002626| |002646| |002688| |002689| |002691| |002719| |002724| |002734| |002752| |002777| |002802| |002823| |002825| |002861| |002864| |002873| |002877| |002879| |002887| |002895| |002896| |002951| |002961| |002969| |002977| |002979| |002983| |002995| |200869| |300021| |300024| |300034| |300036| |300047| |300056| |300062| |300077| |300082| |300101| |300121| |300141| |300143| |300148| |300159| |300165| |300181| |300223| |300239| |300241| |300246| |300292| |300299| |300323| |300333| |300334| |300337| |300345| |300366| |300386| |300403| |300419| |300462| |300468| |300490| |300494| |300517| |300520| |300535| |300547| |300554| |300561| |300589| |300612| |300630| |300644| |300668| |300669| |300699| |300729| |300739| |300747| |300749| |300751| |300757| |300772| |300779| |300785| |300792| |300808| |300821| |300829| |300831| |300851| |300867| |300869| |300875| |300878| |300880| |300884| |300894| |300939| |300943| |300949| |300960| |300962| |300980| |300994| |301000| |301005| |301013| |301021| |301027| |301032| |301035| |301042| |301046| |301051| |301076| |301097| |301107| |301117| |301119| |301123| |301141| |301171| |301198| |301199| |301203| |301205| |301209| |301211| |301217| |301223| |301230| |301255| |301259| |301280| |301286| |301289| |301302| |301314| |301318| |301335| |301355| |301357| |301372| |301378| |301487| |301525| |301580| |301608| |430270| |600168| |600323| |600338| |600461| |600583| |603015| |603040| |603085| |603386| |603696| |603703| |603816| |603823| |603886| |605080| |605599| |688020| |688049| |688197| |688367| |688616| |688638| |688683| |831215| |831475| |832821| |833293| |833645| |833942| |833958| |834013| |834182| |834991| |835150| |835604| |835873| |835951| |836046| |837069| |837359| |837380| |837884| |838193| |838942| |839276| |870132| |870156| |870910| |871053| |871196| |000004| |000020| |000026| |000070| |000407| |000408| |000419| |000421| |000503| |000533| |000545| |000548| |000559| |000593| |000600| |000619| |000655| |000657| |000661| |000668| |000670| |000681| |000698| |000701| |000703| |000708| |000722| |000728| |000729| |000733| |000735| |000751| |000752| |000753| |000788| |000789| |000809| |000810| |000812| |000815| |000816| |000819| |000821| |000822| |000877| |000883| |000888| |000890| |000905| |000906| |000912| |000915| |000917| |000929| |000930| |000948| |000953| |000960| |000968| |000972| |000985| |000997| |000999| |001203| |001205| |001216| |001218| |001301| |001332| |001380| |002011| |002015| |002028| |002029| |002038| |002039| |002040| |002055| |002063| |002064| |002075| |002080| |002085| |002092| |002093| |002098| |002105| |002107| |002121| |002132| |002138| |002148| |002150| |002158| |002162| |002165| |002171| |002178| |002197| |002202| |002212| |002218| |002219| |002223| |002226| |002236| |002253| |002255| |002262| |002278| |002283| |002284| |002298| |002299| |002305| |002312| |002327| |002332| |002338| |002344| |002347| |002374| |002391| |002415| |002418| |002419| |002424| |002429| |002434| |002436| |002437| |002441| |002452| |002457| |002462| |002475| |002480| |002492| |002532| |002534| |002539| |002552| |002566| |002571| |002574| |002577| |002578| |002582| |002609| |002611| |002612| |002630| |002644| |002645| |002670| |002672| |002676| |002686| |002690| |002706| |002709| |002728| |002735| |002758| |002772| |002780| |002785| |002789| |002808| |002855| |002870| |002876| |002880| |002885| |002902| |002908| |002909| |002911| |002982| |002988| |003005| |003012| |003022| |003029| |003035| |003040| |200020| |200026| |200468| |300003| |300017| |300022| |300030| |300040| |300053| |300059| |300070| |300073| |300087| |300111| |300115| |300122| |300130| |300138| |300142| |300146| |300147| |300168| |300173| |300174| |300177| |300187| |300190| |300193| |300196| |300208| |300213| |300220| |300221| |300265| |300270| |300271| |300289| |300291| |300300| |300303| |300320| |300322| |300328| |300348| |300351| |300358| |300368| |300385| |300393| |300400| |300404| |300412| |300413| |300439| |300457| |300474| |300475| |300500| |300500| |300513| |300527| |300533| |300546| |300553| |300559| |300569| |300584| |300592| |300595| |300601| |300603| |300618| |300625| |300632| |300633| |300634| |300661| |300676| |300679| |300686| |300693| |300700| |300701| |300712| |300722| |300726| |300736| |300738| |300766| |300770| |300774| |300812| |300850| |300859| |300882| |300883| |300889| |300895| |300922| |300938| |300952| |300953| |300958| |300961| |300964| |300992| |301015| |301023| |301038| |301039| |301069| |301072| |301089| |301102| |301118| |301130| |301138| |301148| |301162| |301176| |301182| |301229| |301236| |301262| |301282| |301293| |301305| |301312| |301328| |301362| |301397| |301448| |301508| |301511| |301538| |301568| |400061| |400062| |430008| |430023| |430243| |430512| |430568| |430581| |600055| |600056| |600059| |600062| |600063| |600084| |600087| |600095| |600099| |600105| |600120| |600141| |600161| |600188| |600199| |600237| |600269| |600282| |600300| |600302| |600313| |600327| |600332| |600352| |600361| |600365| |600395| |600397| |600408| |600409| |600422| |600429| |600433| |600444| |600467| |600470| |600476| |600480| |600498| |600502| |600503| |600519| |600520| |600523| |600535| |600546| |600549| |600551| |600561| |600562| |600566| |600575| |600578| |600584| |600594| |600595| |600602| |600633| |600658| |600664| |600666| |600679| |600693| |600711| |600718| |600725| |600740| |600745| |600749| |600750| |600771| |600777| |600787| |600797| |600801| |600803| |600805| |600812| |600826| |600828| |600839| |600841| |600850| |600864| |600869| |600872| |600874| |600881| |600894| |600955| |600963| |600965| |600970| |600980| |600993| |601011| |601088| |601208| |601268| |601368| |601369| |601399| |601598| |601619| |601633| |601666| |601668| |601718| |601777| |601799| |601825| |601918| |601956| |601965| |601975| |603006| |603012| |603021| |603023| |603035| |603041| |603078| |603079| |603086| |603095| |603125| |603128| |603136| |603156| |603163| |603181| |603182| |603183| |603186| |603196| |603216| |603219| |603228| |603231| |603275| |603311| |603396| |603408| |603501| |603506| |603516| |603529| |603535| |603536| |603568| |603586| |603595| |603600| |603601| |603610| |603656| |603658| |603660| |603688| |603697| |603699| |603725| |603727| |603788| |603813| |603813| |603817| |603909| |603916| |603919| |603931| |603948| |603976| |603983| |603986| |605001| |605005| |605009| |605018| |605058| |605108| |605365| |605376| |605398| |605488| |605588| |605589| |688009| |688010| |688027| |688033| |688055| |688063| |688065| |688066| |688111| |688116| |688125| |688130| |688136| |688156| |688158| |688162| |688163| |688181| |688188| |688191| |688207| |688213| |688222| |688232| |688233| |688253| |688258| |688266| |688267| |688276| |688291| |688301| |688302| |688335| |688365| |688366| |688370| |688381| |688392| |688398| |688399| |688419| |688433| |688450| |688466| |688475| |688502| |688505| |688508| |688543| |688553| |688607| |688612| |688617| |688620| |688630| |688657| |688665| |688671| |688707| |688720| |688766| |688778| |688779| |830881| |831008| |831102| |831359| |831377| |831508| |831681| |832097| |832461| |832659| |832745| |833229| |833601| |833673| |833742| |834801| |835686| |835716| |836304| |836546| |837635| |837722| |838520| |838891| |839243| |839448| |839562| |839711| |870341| |871363| |900901| |900916| |900920| |900933| |900939| |Q161109| |Q164277| |Q210073| |000037| |000089| |000090| |000159| |000429| |000516| |000532| |000581| |000582| |000598| |000633| |000677| |000755| |000762| |000777| |000779| |000786| |000798| |000818| |000868| |000899| |000911| |000922| |000950| |000963| |000988| |000990|

匹配数超长字符串 数据很多 只截取了一部分

无法传图,哎!


还是不行  提示过程试图写入的管道不存在
作者: 66899981    时间: 2024-10-28 09:51

回复  66899981

须把整个匹配数超长字符串 |000004| |000020| ... |605018| |605058|
直接写入(前后没 ...
aloha20200628 发表于 2024-10-28 08:43



    我都服了 用了22楼的数据和DATA.TXT数据 还会提示 运行时错误:文件未找到
作者: aloha20200628    时间: 2024-10-28 10:22

本帖最后由 aloha20200628 于 2024-10-28 10:24 编辑

回复 31# 66899981

别急!鼓捣软件数据这种活儿就得要足够的耐心和细心...
用29楼的方法流程再跑一遍24楼代码》先将 "匹配数超长字符串.txt" 这个单行文件更名为 "1.txt",再将24楼代码第二行中的 "匹配数超长字符串.txt" 改为 "1.txt",试试结果如何...

作者: 66899981    时间: 2024-10-28 10:53

回复  66899981

别急!鼓捣软件数据这种活儿就得要足够的耐心和细心...
用29楼的方法流程再跑一遍24楼 ...
aloha20200628 发表于 2024-10-28 10:22



    我没急,只是都不好意思麻烦兄弟了
作者: aloha20200628    时间: 2024-10-28 10:57

本帖最后由 aloha20200628 于 2024-10-28 11:24 编辑


本帖挑战的不是算法,而是超长字符串数据量,批处为此下课了。
但如果超长字符串能被预先分成每行8K字符量以内的n个数据行存入一个文件(即每行至多8000个英文字符长度,行头行尾没有空格),例如名为1.txt,即可又让批处+findstr ‘满血复活’了,毕竟 findstr 是用c/c++打造的。
其实8楼已经验证了此方法的有效性,即如以下代码
  1. @echo off &for /f "delims=" %%a in (1.txt) do (
  2. findstr /lv "%%a" data.txt>0.0
  3. move /y 0.0 data.txt
  4. ) 2>nul
  5. pause&exit/b
复制代码

作者: hfxiang    时间: 2024-10-28 10:59

回复 21# 66899981

把关键字保存为key.txt,利用gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )可实现:
  1. gawk -F"[ ^|]+" "FNR==NR{if(NF){for(i=1;i<=NF;i++)if($i)A[$i]=1}next}!A[$2]" key.txt data.txt>out.txt
复制代码

作者: 66899981    时间: 2024-10-28 11:00

回复  66899981

别急!鼓捣软件数据这种活儿就得要足够的耐心和细心...
用29楼的方法流程再跑一遍24楼 ...
aloha20200628 发表于 2024-10-28 10:22



    还真可以了,DATA.txt  里面总是增加 Microsoft (R) Windows Script Host Version 5.812
版权所有(C) Microsoft Corporation。保留所有权利。如何不增加这句呢?
作者: aloha20200628    时间: 2024-10-28 11:12

本帖最后由 aloha20200628 于 2024-10-28 11:20 编辑

回复 36# 66899981

24楼代码第2行改为如下样子即可取消cscript商标信息...
  1. type "data.txt"|cscript /nologo /e:jscript "%~f0" "1.txt">0.0
复制代码
24楼代码已订正,可取消cscript商标信息报告,但其中的 "1.txt" 文件名取舍还要楼主自定...

作者: 66899981    时间: 2024-10-28 11:28

回复  66899981

24楼代码第2行改为如下样子即可取消cscript商标信息...24楼代码已订正,可取消cscript商 ...
aloha20200628 发表于 2024-10-28 11:12




真是太感谢了,要是在一个城市多少要聚聚喝两杯
作者: 66899981    时间: 2024-10-28 12:01

回复  66899981

24楼代码第2行改为如下样子即可取消cscript商标信息...24楼代码已订正,可取消cscript商 ...
aloha20200628 发表于 2024-10-28 11:12



    最后一个问题,这个能不能执行完自动关闭
作者: aloha20200628    时间: 2024-10-28 12:03

回复 38# 66899981

《批处理之家》几十年不倒,虽然解答者来来去去,但总有一些无私者 助人为乐,接棒加油,让这个论坛的座右铭 ‘批处理—化繁为简,提高工作效率’ 闪闪发光。每日练练脑力操,帮人利己,能收获一点儿多巴胺和内分肽,也不错...

作者: 66899981    时间: 2024-10-28 12:20

回复  66899981

《批处理之家》几十年不倒,虽然解答者来来去去,但总有一些无私者 助人为乐,接棒加油 ...
aloha20200628 发表于 2024-10-28 12:03



    感谢!
作者: aloha20200628    时间: 2024-10-28 12:33

回复 39# 66899981

24楼代码第4行改为 exit/b */ 即可...

作者: 66899981    时间: 2024-10-28 12:50

回复  66899981

24楼代码第4行改为 exit/b */ 即可...
aloha20200628 发表于 2024-10-28 12:33



    感谢!完美!
作者: 66899981    时间: 2024-10-29 22:19

回复  66899981

24楼代码第4行改为 exit/b */ 即可...
aloha20200628 发表于 2024-10-28 12:33



哥们你好,今天我有测试检测匹配数超长字符串里面有4000多条  然后最后的结果就是 DATA.txt 变成空数据了
作者: 66899981    时间: 2024-10-29 22:22

回复  66899981

24楼代码第4行改为 exit/b */ 即可...
aloha20200628 发表于 2024-10-28 12:33




https://wwnl.lanzoul.com/iJsGD2dos9jg  我上传的网盘里了   1.TXT就是匹配  删除DATA.TXT里整行
作者: aloha20200628    时间: 2024-10-29 23:39

本帖最后由 aloha20200628 于 2024-10-29 23:42 编辑

回复 45# 66899981

用24楼代码(其中改用 1.txt)测试结果》
发现 1.txt 文件中有 几个匹配字段形如
Q161109
Q140681
Q162834
Q163257
Q164277
Q161149
Q210073
如果删除这个前缀 Q 字符,重新存盘 1.txt, 测试全部通过,运行时间约2分钟,结果文件 data.txt 最终变为73行,其中每行均包含有 Q 字符前缀匹配数的数据行。

作者: 66899981    时间: 2024-10-30 10:53

回复  66899981

用24楼代码(其中改用 1.txt)测试结果》
发现 1.txt 文件中有 几个匹配字段形如
Q1 ...
aloha20200628 发表于 2024-10-29 23:39

谢谢哥们的帮助
作者: aloha20200628    时间: 2024-10-30 11:55

本帖最后由 aloha20200628 于 2024-10-30 12:13 编辑

回复 47# 66899981

用45楼提供的实况数据样本data.txt和1.txt做了一个反向测试,验证结果与用24楼代码的运行结论完全一致》即1.txt文件中的匹配数完全覆盖了data.txt文件中每行的第2列字段,因此运行结果是data.txt中的所有行全部被删除...

以下这段反向测试代码的简要说明》先提取data.txt文件中每行头部字段至临时文件0.0,再用gawk.exe对0.0文件去重,结果剩余5904行存为_data.txt(即data.txt文件中不重复的所有第2列字段),再用find.exe与1.txt中的每组数匹配,汇总匹配行总数m和未匹配行总数n,其中m值即data.txt文件中应被删除行数,n值即data.txt文件中应被保留行数

代码中的 gawk.exe 可从本坛第三方下载 http://bcn.bathome.net/s/tool/index.html?key=gawk
测试代码运行用时约1分钟...

  1. @echo off &(for /f "tokens=2 delims=|" %%a in (data.txt) do echo,%%a)>0.0
  2. gawk.exe "{if(++a[$0]==1)print $0}" 0.0>_data.txt
  3. del/q "0.0" &set/a "m=0,n=0" &for /f "delims=" %%a in (_data.txt) do (
  4. find /i "|%%a|" "1.txt" && set/a "m+=1" || set/a "n+=1"
  5. )>nul 2>nul
  6. echo,应被删除行总数=%m%,应被保留行总数=%n%
  7. pause&exit/b
复制代码

作者: aloha20200628    时间: 2024-10-30 15:20

本帖最后由 aloha20200628 于 2024-10-30 15:21 编辑


根据45楼提供的实况数据样本data.txt和1.txt,用34楼的新算法重写了如下代码,先用 jscript 把 1.txt(共有10512组匹配数,94612个字符)分成了总共12行的临时文件 0.1,其中每行至多 900 组匹配数不超过8K字符量(尽量趋近 findstr 命令行参数长度极限),再用以下代码跑一遍,其结果虽与24楼代码的运行结果完全相同,但提速极为显著,用时不足2秒,而24楼代码用时约2分钟...
  1. @set @x=1 /* &@echo off
  2. type "1.txt"|cscript /nologo /e:jscript "%~f0">0.1
  3. for /f "delims=" %%a in (0.1) do (
  4. findstr /lv "%%a" data.txt>0.0
  5. move /y 0.0 data.txt
  6. )>nul 2>nul
  7. del/q "0.1" &pause&exit/b */
  8. a=WSH.stdin.readall().split(' ');
  9. for (n=0,l=a.length; n<l; n+=900)
  10.      WSH.echo(a.slice(n,n+900).join(' '));
  11. WSH.quit();
复制代码





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