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

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

[复制链接]
发表于 2015-3-6 13:28:12 | 显示全部楼层 |阅读模式
本帖最后由 每天几分 于 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
复制代码
发表于 2015-3-6 14:23:06 | 显示全部楼层
回复 1# 每天几分
问题一、重复字数超过3个字的行,这句有歧义,像下面的删哪些呢?空格算一个重复字符吗?

  1. 边 lz
  2. 边 lzd
  3. 边 lzld
  4. 边 lzzd
复制代码
问题二、如果是以下情况删不删呢?

  1. 边 lz
  2. 边 dzl (删?)
  3. 边 vpdyzipll(删?)
复制代码
发表于 2015-3-6 14:55:52 | 显示全部楼层
  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技术 +1 收起 理由
每天几分 + 1 非常感谢,就是这样!

查看全部评分

 楼主| 发表于 2015-3-6 16:17:41 | 显示全部楼层
谢谢3楼的apang,就是要这样的效果。
2楼的朋友,我已经在一楼重新编辑了,表述可能有点问题,看代码那里容易理解点。只针对中文汉字重复。
发表于 2015-3-6 16:47:44 | 显示全部楼层
回复 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技术 +1 收起 理由
每天几分 + 1 谢谢!

查看全部评分

发表于 2015-3-6 17:14:19 | 显示全部楼层
  1. gawk "{if(a[$1]++)print>\"2.txt\";else print>\"3.txt\"}" 1.txt
复制代码
发表于 2015-3-6 18:42:55 | 显示全部楼层
  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技术 +1 收起 理由
每天几分 + 1 谢谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-22 23:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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