标题: [文本处理] [已解决]批处理删除并提取重复的中文汉字超过3个字的行。 [打印本页]
作者: 每天几分 时间: 2015-3-6 13:28 标题: [已解决]批处理删除并提取重复的中文汉字超过3个字的行。
本帖最后由 每天几分 于 2015-3-6 16:17 编辑
- 臂 sky
- 璧 skd
- 边 lz
- 边 lzd
- 边 vpd
- 砭 spz
- 笾 zlz
- 餐 bx
- 餐 bxg
- 餐 can
- 餐 ihp
- 编 ah
- 编 ahu
- 编 vvh
- 煸 hhu
复制代码
如上,不用排序 ,只把重复的中文汉字超过3个字的行删除,并将删除的字所在行单独提取出来。
最终实现如下2个文本- 臂 sky
- 璧 skd
- 砭 spz
- 笾 zlz
- 煸 hhu
复制代码
- 边 lz
- 边 lzd
- 边 vpd
- 餐 bx
- 餐 bxg
- 餐 can
- 餐 ihp
- 编 ah
- 编 ahu
- 编 vvh
复制代码
作者: pcl_test 时间: 2015-3-6 14:23
回复 1# 每天几分
问题一、重复字数超过3个字的行,这句有歧义,像下面的删哪些呢?空格算一个重复字符吗?复制代码
问题二、如果是以下情况删不删呢?- 边 lz
- 边 dzl (删?)
- 边 vpdyzipll(删?)
复制代码
作者: apang 时间: 2015-3-6 14:55
- @echo off
- setlocal enabledelayedexpansion
- (for /f %%a in ('sort 1.txt ^& echo,') do (
- if "%%a" NEQ "!a!" (
- if !n! GEQ 3 echo,!a!
- set n=1
- ) else set /a n+=1
- set "a=%%a"
- ))>$
- findstr /ibvg:$ 1.txt > 2.txt
- findstr /ibg:$ 1.txt > 3.txt
- pause
复制代码
作者: 每天几分 时间: 2015-3-6 16:17
谢谢3楼的apang,就是要这样的效果。
2楼的朋友,我已经在一楼重新编辑了,表述可能有点问题,看代码那里容易理解点。只针对中文汉字重复。
作者: pcl_test 时间: 2015-3-6 16:47
回复 4# 每天几分 - @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in ('type "1.txt"') do (
- set n=0
- findstr /r /c:"%%a" "1.txt" >$
- for /f "delims=" %%i in ($) do set /a n+=1
- if !n! gtr 2 (>>不符合.txt echo,%%a %%b) else (>>符合.txt echo,%%a %%b)
- del $
- )
- pause
复制代码
作者: DAIC 时间: 2015-3-6 17:14
- gawk "{if(a[$1]++)print>\"2.txt\";else print>\"3.txt\"}" 1.txt
复制代码
作者: CrLf 时间: 2015-3-6 18:42
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in (1.txt) do set /a [%%a]+=1
- (for /f "delims==" %%b in ('set [') do if ![%%b]! geq 3 echo %%b)>$
- findstr /r /b /g:$ "1.txt">不符合.txt
- findstr /r /b /v /g:$ "1.txt">符合.txt
- del $
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |