Board logo

标题: [文本处理] 【已解决】批处理如何读取文本内容并在每行行尾添加系列数字? [打印本页]

作者: 末夏未至    时间: 2016-1-3 15:18     标题: 【已解决】批处理如何读取文本内容并在每行行尾添加系列数字?

本帖最后由 末夏未至 于 2016-1-21 09:55 编辑

现有a.txt内容如下:
1300000
1302003
1300330
1304400
........
(每行一行,为7位的数字)
-----------------
现在需要读取每一行的数字,在数字后面从0000加到9999,写入新的b.txt,新的b.txt内容是:
13000000000
....(顺序增大到)
13000009999
然后读第二行1302003,同样的要求,写到上面这个b.txt中。请考虑a.txt的内容很多,数万行。

请帮忙,谢谢!
作者: 回家路上    时间: 2016-1-3 15:53

http://batch-cn.qiniudn.com/s/to ... n=gawk&key=gawk
  1. gawk "{for (i=0;i<=9999;i++) printf(\"%d%04d\n\",$0,i)}" a.txt>b.txt
复制代码

作者: 回家路上    时间: 2016-1-3 16:04

写入过程可以通过
  1. tail -f b.txt
复制代码
查看写入进度
http://batch-cn.qiniudn.com/tool/tail.exe
作者: DAIC    时间: 2016-1-3 16:12

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /l %%i in (10000,1,19999) do (
  4.     set n=%%i
  5.     echo !n:~1!
  6. ))>"%temp%\1.data"
  7. type nul >b.txt
  8. for /f %%i in ('type "a.txt"') do (
  9.     echo 正在处理 %%i
  10.     (for /f %%j in ('type "%temp%\1.data"') do (
  11.         echo %%i%%j
  12.     ))>>b.txt
  13. )
复制代码

作者: codegay    时间: 2016-1-4 09:12

这是换小号来要代码了?
作者: 依山居    时间: 2016-1-4 10:25

  1. """
  2. 生成测试数据
  3. 依山居 2016年1月4日 09:42:40
  4. """
  5. #生成测试数据
  6. txt=[str(r).ljust(7,"@")+"\n" for r in range(1,999999)]
  7. with open("数据.txt","w+") as f:
  8.     f.writelines(txt)
  9. #生成0000-9999序列待用
  10. sq=[str(r).zfill(4)+"\n" for r in range(0,10000)]
  11. with open("序列.txt","w+") as f:
  12.     f.writelines(sq)
复制代码

作者: codegay    时间: 2016-1-4 10:29

妈蛋,切错帐号了。
作者: codegay    时间: 2016-1-4 13:49

回复 4# DAIC


    赞思路。我个人觉得echo 很慢,实际当中处理数据不能不停的打印正在处理的数据,因为实在太慢了,严重影响效率。以及楼主这问题生成的数据量好恐怖,一万行就生成了上G的文本。
作者: codegay    时间: 2016-1-4 14:05

  1. """
  2. python正则版读取文本内容并在每行行尾添加系列数字.py
  3. http://www.bathome.net/thread-38881-1-1.html
  4. 依山居 2016年1月4日 11:09:51
  5. """
  6. import re
  7. import time
  8. start=time.time()
  9. print("运行中..."*3)
  10. #生成0000-9999序列
  11. sq=''.join([str(r).zfill(4)+"\n" for r in range(0,10000)])
  12. #或者直接取前前面脚本的生成好的序列
  13. #with open("序列.txt") as f:
  14. #   sq=f.read()
  15. with open("数据.txt") as f:
  16.     data=f.readlines()
  17.    
  18. for r in data:
  19.     result=re.sub('(\d+)',r'%s\1' % r.rstrip(),sq)
  20.     with open("result.txt","a+") as f:
  21.         f.write(result)
  22. end=time.time()
  23. pt=end-start
  24. print("运行耗时:",pt)
  25. try:
  26.     input("按回车退出")
  27. except SyntaxError:
  28.     pass
  29. """
  30. 测试数据为一万行数时,得到的文本为1.2GB
  31. 处理时间大约是182秒。
  32. """
复制代码

作者: DAIC    时间: 2016-1-4 14:22

回复 8# codegay


    是的。主要是考虑到楼主可能这样问:为啥执行代码之后半天没有反应啊
作者: pcl_test    时间: 2016-1-4 18:17

vbs水一发
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set f1 = fso.OpenTextFile("a.txt", 1)
  3. Set f2 = fso.CreateTextFile("b.txt", 2)
  4. Do While f1.AtEndOfStream <> True
  5.     line = f1.ReadLine
  6.     For i=10000 to 19999
  7.         f2.WriteLine line & Right(i, 4)
  8.     Next
  9. Loop
  10. Set fso=nothing
  11. msgbox "完成"
复制代码

作者: 依山居    时间: 2016-1-4 20:11

;
test
作者: 依山居    时间: 2016-1-4 20:12

发表情还需要特权?
作者: DAIC    时间: 2016-1-4 20:17

回复 13# 依山居


需要表情的完整地址,例如:
  1. http://bbs.bathome.net/images/smilies/default/smile.gif
复制代码

作者: codegay    时间: 2016-1-4 20:33

本帖最后由 codegay 于 2016-1-4 20:44 编辑
  1. """
  2. 读取文本内容并在每行行尾添加系列数字.py
  3. http://www.bathome.net/thread-38881-1-1.html
  4. 依山居 2016年1月4日 20:13:28
  5. """
  6. import time
  7. start=time.time()
  8. print("运行中..."*3)
  9. #生成0000-9999,用了楼上的思路
  10. sq=[str(r)[1:] for r in range(10000,20000)]
  11. with open("数据.txt") as f:
  12.     for l in f.readlines():
  13.         with open("result.txt","a+") as f:
  14.             f.writelines([l.rstrip()+s+"\n" for s in sq])
  15. end=time.time()
  16. pt=end-start
  17. print("运行耗时:",pt)
  18. try:
  19.     input("按回车退出")
  20. except SyntaxError:
  21.     pass
  22. """
  23. 数据.txt一万行152秒
  24. result.txt 1.2GB
  25. """
复制代码
每成生一万行结果再写入文件
作者: 依山居    时间: 2016-1-4 21:00

  1. """
  2. 读取文本内容并在每行行尾添加系列数字.py
  3. http://www.bathome.net/thread-38881-1-1.html
  4. 依山居 2016年1月4日 20:53:41
  5. 完全逐行处理再逐行写入
  6. """
  7. import time
  8. start=time.time()
  9. print("运行中..."*3)
  10. #生成0000-9999,用了楼上的思路
  11. sq=[str(r)[1:]+"\n" for r in range(10000,20000)]
  12. with open("数据.txt") as fa,open("result.txt","a+") as fb:
  13.     for l in fa:
  14.         sn=l.rstrip()
  15.         for s in sq:
  16.             fb.write(sn+s)
  17.             
  18. end=time.time()
  19. pt=end-start
  20. print("运行耗时:",pt)
  21. try:
  22.     input("按回车退出")
  23. except SyntaxError:
  24.     pass
  25. """
  26. 数据.txt一万行129-143秒
  27. result.txt 1.2GB
  28. 我了个去,发生了什么。逐行处理再逐行写入反而比较快。
  29. """
复制代码





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