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

[文本处理] [已解决]批处理删除并提取重复的中文汉字超过3个字的行。

本帖最后由 每天几分 于 2015-3-6 16:17 编辑
  1. 臂 sky
  2. 璧 skd
  3. 边 lz
  4. 边 lzd
  5. 边 vpd
  6. 砭 spz
  7. 笾 zlz
  8. 餐 bx
  9. 餐 bxg
  10. 餐 can
  11. 餐 ihp
  12. 编 ah
  13. 编 ahu
  14. 编 vvh
  15. 煸 hhu
复制代码
如上,不用排序 ,只把重复的中文汉字超过3个字的行删除,并将删除的字所在行单独提取出来。

最终实现如下2个文本
  1. 臂 sky
  2. 璧 skd
  3. 砭 spz
  4. 笾 zlz
  5. 煸 hhu
复制代码
  1. 边 lz
  2. 边 lzd
  3. 边 vpd
  4. 餐 bx
  5. 餐 bxg
  6. 餐 can
  7. 餐 ihp
  8. 编 ah
  9. 编 ahu
  10. 编 vvh
复制代码

回复 1# 每天几分
问题一、重复字数超过3个字的行,这句有歧义,像下面的删哪些呢?空格算一个重复字符吗?
  1. 边 lz
  2. 边 lzd
  3. 边 lzld
  4. 边 lzzd
复制代码
问题二、如果是以下情况删不删呢?
  1. 边 lz
  2. 边 dzl (删?)
  3. 边 vpdyzipll(删?)
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f %%a in ('sort 1.txt ^& echo,') do (
  4.         if "%%a" NEQ "!a!" (
  5.                 if !n! GEQ 3 echo,!a!
  6.                 set n=1
  7.         ) else set /a n+=1
  8.         set "a=%%a"
  9. ))>$
  10. findstr /ibvg:$ 1.txt > 2.txt
  11. findstr /ibg:$ 1.txt > 3.txt
  12. pause
复制代码
1

评分人数

TOP

谢谢3楼的apang,就是要这样的效果。
2楼的朋友,我已经在一楼重新编辑了,表述可能有点问题,看代码那里容易理解点。只针对中文汉字重复。

TOP

回复 4# 每天几分
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%a in ('type "1.txt"') do (
  4. set n=0
  5. findstr /r /c:"%%a" "1.txt" >$
  6. for /f "delims=" %%i in ($) do set /a n+=1
  7. if !n! gtr 2 (>>不符合.txt echo,%%a %%b) else (>>符合.txt echo,%%a %%b)
  8. del $
  9. )
  10. pause
复制代码
1

评分人数

TOP

  1. gawk "{if(a[$1]++)print>\"2.txt\";else print>\"3.txt\"}" 1.txt
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%a in (1.txt) do set /a [%%a]+=1
  4. (for /f "delims==" %%b in ('set [') do if ![%%b]! geq 3 echo %%b)>$
  5. findstr /r /b /g:$ "1.txt">不符合.txt
  6. findstr /r /b /v /g:$ "1.txt">符合.txt
  7. del $
  8. pause
复制代码
1

评分人数

TOP

返回列表