找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 88034|回复: 19

[文本处理] 批处理如何删除txt中每行开头指定字符前的字符串重复出现次数超过指定次数的行?

[复制链接]
发表于 2013-7-24 19:49:33 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-7 22:42 编辑

huangbaohua|1979601521huang
huangbaohua|1979601521huang
857084682|5678967890
lapo5363|466742517
sishenlaile|yytl1103
优雅先生|1986315
优雅先生|198631215
优雅先生|19812631215
优雅先生|1981231aaa6315
优雅先生|1986312342345
优雅先生|1986315

雨姬|681122
前度|19840924

我就是想吧一个文本内,“|”前的内容超过5行的内容,删除掉

如上内容  优雅先生,优雅先生超过5行,就是想将  优雅先生的那行内容全部删除

最好就是文本1 处理后,导出为 文本2
发表于 2013-7-24 20:15:26 | 显示全部楼层
本帖最后由 batman 于 2013-7-24 20:17 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=|" %%a in (1.txt) do set /a n+=1,.%%a+=1&set "_!n!=%%a|%%b"
  3. (for /l %%a in (1,1,%n%) do (
  4.   for /f "tokens=1* delims=|" %%b in ("!_%%a!") do if !.%%b! leq 5 echo,%%b^|%%c
  5. ))>2.txt
  6. start 2.txt
复制代码
 楼主| 发表于 2013-7-24 21:10:21 | 显示全部楼层
回复 2# batman


    按照你的代码,如果是超过10行删除的话是不是 吧 “5” 修改为“10“就好了
发表于 2013-7-24 21:19:19 | 显示全部楼层
Try it, then you can understand...
 楼主| 发表于 2013-7-25 12:02:34 | 显示全部楼层
回复 4# batman

    数据处理效率不是很好

6MB的文本,里面行数有超过32行的,处理中,就提示如图显示
发表于 2013-7-25 17:43:14 | 显示全部楼层
纯P,这大文本你期待多快?
|符号的前面,你有些有特殊字符吧,像空格什么的,你举的例子并未列出来...
不行把文本压缩下传到网盘,把下载地址贴出来

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=|" %%a in ('sort 1.txt') do (
  3.         set "str5=!str4!"
  4.         set "str4=!str3!"
  5.         set "str3=!str2!"
  6.         set "str2=!str1!"
  7.         set "str1=%%a"
  8.         if "!str5!"=="!str1!" (
  9.                 if not defined . (
  10.                         set .=.
  11.                         set "#=!#!/ic:"%%a^|" "
  12.                 )
  13.         ) else set .=
  14. )
  15. if defined # (findstr /v %#% 1.txt>2.txt)else copy /y 1.txt 2.txt
复制代码
 楼主| 发表于 2013-7-27 15:57:45 | 显示全部楼层
回复 6# xxpinqz


    我处理的文件就是这样的, 你看下

有时候是几万 条
发表于 2013-7-27 18:10:35 | 显示全部楼层
大文本建议用第三方神器 gawk,爽爽的:
  1. @gawk -F"|" "FNR!=NR&&ar[$1]<5;{ar[$1]+=1}" 1.txt 1.txt>2.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 感谢您!

查看全部评分

 楼主| 发表于 2017-5-4 18:38:32 | 显示全部楼层
回复 8# CrLf


    如果是想删除小于| 前面的重复数,该怎么修改这个代理

比如想删除小于5个|重复数,正好与你这个相反
发表于 2017-5-4 19:50:28 | 显示全部楼层
回复 9# Rasm


    以顶楼数据为例,希望得到什么结果?
 楼主| 发表于 2017-5-4 21:43:59 | 显示全部楼层
回复 10# ShowCode


huangbaohua|19796uang
huangbaohua|197960
huangbaohua|1979601521
huangbaohua|1979601
huangbaohua|191huang
857084682|5678967890
lapo5363|466742517
sishenlaile|yytl1103
优雅先生|1986315
优雅先生|198631215
优雅先生|19812631215
优雅先生|1981231aaa6315
优雅先生|1986312342345
优雅先生|1986315
雨姬|681122
前度|19840924


=================

以上数据为例,希望得到  |  前面的数值重复数在 5-8之间

如:

huangbaohua|19796uang
huangbaohua|197960
huangbaohua|1979601521
huangbaohua|1979601
huangbaohua|191huang
优雅先生|1986315
优雅先生|198631215
优雅先生|19812631215
优雅先生|1981231aaa6315
优雅先生|1986312342345
优雅先生|1986315
发表于 2017-5-4 23:26:02 | 显示全部楼层
回复 10# ShowCode


    你把这时间和精力用来做别的事情,会更有意义。
发表于 2017-5-5 14:26:56 | 显示全部楼层
回复 11# Rasm
  1. gawk -F "|" "{a[$1][n++]=$0}END{for(i in a){x=length(a[i]);if(x>=5&&x<=8){for(j in a[i])print a[i][j]}}}" 1.txt > 2.txt
复制代码
 楼主| 发表于 2017-6-7 19:28:46 | 显示全部楼层
回复 13# ShowCode


    为什么处理结果是空的
 楼主| 发表于 2017-6-7 19:29:06 | 显示全部楼层
回复 8# CrLf


    有些为什么不可以呢,中文的有些不行,没有筛选出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 21:27 , Processed in 0.022408 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表