标题: [文本处理] 批处理如何删除txt中每行开头指定字符前的字符串重复出现次数超过指定次数的行? [打印本页]
作者: Rasm 时间: 2013-7-24 19:49 标题: 批处理如何删除txt中每行开头指定字符前的字符串重复出现次数超过指定次数的行?
本帖最后由 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
作者: batman 时间: 2013-7-24 20:15
本帖最后由 batman 于 2013-7-24 20:17 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=|" %%a in (1.txt) do set /a n+=1,.%%a+=1&set "_!n!=%%a|%%b"
- (for /l %%a in (1,1,%n%) do (
- for /f "tokens=1* delims=|" %%b in ("!_%%a!") do if !.%%b! leq 5 echo,%%b^|%%c
- ))>2.txt
- start 2.txt
复制代码
作者: Rasm 时间: 2013-7-24 21:10
回复 2# batman
按照你的代码,如果是超过10行删除的话是不是 吧 “5” 修改为“10“就好了
作者: batman 时间: 2013-7-24 21:19
Try it, then you can understand...
作者: Rasm 时间: 2013-7-25 12:02
回复 4# batman
数据处理效率不是很好
6MB的文本,里面行数有超过32行的,处理中,就提示如图显示
作者: xxpinqz 时间: 2013-7-25 17:43
纯P,这大文本你期待多快?
|符号的前面,你有些有特殊字符吧,像空格什么的,你举的例子并未列出来...
不行把文本压缩下传到网盘,把下载地址贴出来- @echo off&setlocal enabledelayedexpansion
- for /f "delims=|" %%a in ('sort 1.txt') do (
- set "str5=!str4!"
- set "str4=!str3!"
- set "str3=!str2!"
- set "str2=!str1!"
- set "str1=%%a"
- if "!str5!"=="!str1!" (
- if not defined . (
- set .=.
- set "#=!#!/ic:"%%a^|" "
- )
- ) else set .=
- )
- if defined # (findstr /v %#% 1.txt>2.txt)else copy /y 1.txt 2.txt
复制代码
作者: Rasm 时间: 2013-7-27 15:57
回复 6# xxpinqz
我处理的文件就是这样的, 你看下
有时候是几万 条
作者: CrLf 时间: 2013-7-27 18:10
大文本建议用第三方神器 gawk,爽爽的:- @gawk -F"|" "FNR!=NR&&ar[$1]<5;{ar[$1]+=1}" 1.txt 1.txt>2.txt
复制代码
作者: Rasm 时间: 2017-5-4 18:38
回复 8# CrLf
如果是想删除小于| 前面的重复数,该怎么修改这个代理
比如想删除小于5个|重复数,正好与你这个相反
作者: ShowCode 时间: 2017-5-4 19:50
回复 9# Rasm
以顶楼数据为例,希望得到什么结果?
作者: Rasm 时间: 2017-5-4 21:43
回复 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
作者: codegay 时间: 2017-5-4 23:26
回复 10# ShowCode
你把这时间和精力用来做别的事情,会更有意义。
作者: ShowCode 时间: 2017-5-5 14:26
回复 11# Rasm - 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
复制代码
作者: Rasm 时间: 2017-6-7 19:28
回复 13# ShowCode
为什么处理结果是空的
作者: Rasm 时间: 2017-6-7 19:29
回复 8# CrLf
有些为什么不可以呢,中文的有些不行,没有筛选出来
作者: /zhqsystem/zhq 时间: 2017-6-7 21:07
- for /f "usebackq delims=|" %%i in ("%~f1")do if defined _%%i (set/a "_%%i+=1")else set "_%%i=1"
- for /f "usebackq delims=" %%i in ("%~f1")do for /f "delims=|" %%j in ("%%i")do (
- echo,总行数:!_%%j! 变量:%%j
- rem:这里自行添加各种判断和输出
- )
复制代码
作者: ShowCode 时间: 2017-6-8 11:27
回复 14# Rasm
把你的txt文件压缩传上来我试试
作者: Rasm 时间: 2017-6-11 11:21
回复 17# ShowCode
这是文本和我写的批处理,中文的过滤不了
作者: ShowCode 时间: 2017-6-11 11:49
回复 18# Rasm
你的txt文件是UTF-8编码格式,先转换成ANSI再执行命令。
作者: Rasm 时间: 2017-6-20 21:21
回复 19# ShowCode
如果是只留下纯字母的,不留数字和字母加数字的,改怎么改代码,感谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |