Board logo

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

作者: daohe    时间: 2015-7-12 15:51     标题: [已解决]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
作者: CrLf    时间: 2015-7-12 16:40

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

作者: daohe    时间: 2015-7-12 17:15

回复 2# CrLf


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

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

作者: pcl_test    时间: 2015-7-12 22:44

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





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2