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

[问题求助] [已解决]gawk 如何识别文本中相同行 并在末尾加数字

[复制链接]
发表于 2015-7-12 15:51:46 | 显示全部楼层 |阅读模式
本帖最后由 daohe 于 2015-7-12 17:16 编辑

一个a.txt,
有一百万行数据, 里面有30% 重复行

碰到重复行后, 在重复的第二行 第三行....第N行, 并在末尾标上一个空格和一个数字,  1, 2, 3, 4,...

举例说明
a.txt 内容如下
aaa
bbb
aaa
ddd
aaa
fff
bbb

处理后变成
aaa
bbb
aaa 1
ddd
aaa 2
fff
bbb 1
发表于 2015-7-12 16:40:51 | 显示全部楼层
  1. gawk "ar[$0]++{$0=$0 FS ar[$0]-1}1" a.txt
复制代码
 楼主| 发表于 2015-7-12 17:15:46 | 显示全部楼层
回复 2# CrLf


    谢谢, 我在后面加了 >b.txt 才能看到结果

所以代码是这样的
  1. gawk "ar[$0]++{$0=$0 FS ar[$0]-1}1" a.txt >b.txt
复制代码
发表于 2015-7-12 22:44:40 | 显示全部楼层
本帖最后由 pcl_test 于 2015-7-12 22:53 编辑

发个vbs
  1. Dim fso,File1,File2,str,Dict
  2. Set Dict = CreateObject("Scripting.Dictionary")
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. Set File1 = fso.OpenTextFile(".\测试.txt", 1)
  5. Set File2 = fso.CreateTextFile(".\结果.txt", 2 ,False)
  6. Do While File1.AtEndOfStream <> True
  7.     str = File1.ReadLine
  8.     If Dict.Exists(str) <> True Then
  9.         File2.WriteLine str
  10.         Dict.Add str, 1
  11.     Else
  12.         File2.WriteLine str&" "&Dict.Item(str)
  13.         Dict.Item(str) = Dict.Item(str)+1
  14.     End If
  15. loop
  16. File1.Close
  17. File2.Close
  18. Dict.RemoveAll
  19. Set Dict = Nothing
  20. MsgBox "完成!"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 00:47 , Processed in 0.018882 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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