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

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

本帖最后由 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

  1. gawk "ar[$0]++{$0=$0 FS ar[$0]-1}1" a.txt
复制代码

TOP

回复 2# CrLf


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

所以代码是这样的
  1. gawk "ar[$0]++{$0=$0 FS ar[$0]-1}1" a.txt >b.txt
复制代码

TOP

本帖最后由 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 "完成!"
复制代码

TOP

返回列表