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

[文本处理] 批处理如何将txt文件单列内容按指定指定行数合并成一行?

本帖最后由 pcl_test 于 2016-7-30 18:42 编辑

各位  txt文件读取转置的时候想实现读取到第几个字符的时候就换行
  1. for /f "tokens=1" %%b in (log.txt) do (
  2. set /p"=%%b "
  3. )<nul >>t2.txt
复制代码
这个实现转置可以,但是不知道怎么实现换行的动作,,


log.txt 里面只有一列数据,但是有几万行,,比方是这样的

1
1
1
2
2
2
3
3
3


想实现的是转置成行排列 读取到第三个就把剩下的放的下一行,再读取三个就再换行,这样
1 1 1
2 2 2
3 3 3

求帮忙!!

先谢过了
1

评分人数

本帖最后由 依山居 于 2015-11-15 20:27 编辑
  1. """
  2. 一列文本进行字符串格式操作转成三列2
  3. 依山居 8:18 2015/11/12
  4. 相关资料: 飘逸的python - 增强的格式化字符串format函数
  5. http://blog.csdn.net/handsomekang/article/details/9183303
  6. 总结,我自己生成了百万行来测试,文本文件8M大,内容为1-999999
  7. 吐槽,改成列表解析百万行数据一秒能处理完,之前写的程序没法看了....
  8. """
  9. print("运行中..."*3)
  10. import time
  11. start=time.time()
  12. l=[]
  13. nl=[]
  14. ft=''
  15. out=open("out.txt","w+")
  16. with open("a.txt") as f:
  17.     txt=f.read()
  18.    
  19.     end=time.time()
  20.     pt=end-start
  21.     print("运行耗时1:",pt)
  22.    
  23.     l=txt.rsplit()
  24.    
  25.     end=time.time()
  26.     pt=end-start
  27.     print("运行耗时2:",pt)
  28.     d=[0,2,1]
  29.     m=len(l)%3
  30.     print(len(l),len(l)%3)
  31.    
  32.     l=l+(d[m])*["--"]
  33.     print(len(l),len(l)%3)
  34.     end=time.time()
  35.     pt=end-start
  36.     print("运行耗时3:",pt)
  37. #=======================================
  38.    
  39. nl=["%s  %s  %s\n" % (l[r],l[r+1],l[r+2]) for r in range(0,len(l),3)]
  40. end=time.time()
  41. pt=end-start
  42. print("运行耗时4:",pt)
  43. #=======================================
  44. out.writelines(nl)
  45. out.close()
  46. end=time.time()
  47. pt=end-start
  48. print("运行耗时:",pt)
  49. try:
  50.     input("按回车退出")
  51. except SyntaxError:
  52.     pass
复制代码

TOP

本帖最后由 依山居 于 2015-11-12 07:00 编辑
  1. """
  2. 一列文本转成三列
  3. 依山居 16:44 2015/11/11
  4. 题目来源 http://www.bathome.net/thread-38097-1-1.html
  5. """
  6. print("运行中..."*3)
  7. import time
  8. start=time.time()
  9. l=[]
  10. out=open("out.txt","w+")
  11. with open("a.txt") as f:
  12.     txt=f.read()
  13.     l=txt.rsplit()
  14.     #print(l)
  15.     #print(len(l))
  16.     #计算长度,求余,尾部分不够三列的补空位。
  17.     l=l+(3-len(l)%3)*["  "]
  18.     #print(len(l))
  19.     while l:
  20.         #经测试前十万行数据一秒内就能完成。
  21.         #数据量越大,字符串太长的不应该使用下面的写法。
  22.         out.write(l[0]+"  "+l[1]+"  "+l[2]+"\n")
  23.         del(l[0:3])
  24. out.close()
  25. end=time.time()
  26. pt=end-start
  27. print("运行耗时:",pt)
  28. try:
  29.     input("按回车退出")
  30. except SyntaxError:
  31.     pass
复制代码

TOP

回复 11# wosliming


    如果取了3个数,就回车,然后清除计数器重新计数

TOP

回复 3# flyinnet9


代码很好用,但是我不是太明白最后两行的意思,能给解释一下不

TOP

  1. """
  2. 生成一列一千万行文本
  3. 依山居 16:32 2015/11/11
  4. """
  5. import time
  6. start=time.time()
  7. out=open("a.txt","a+")
  8. for r in range(10000000):
  9.     out.write(str(r)+"\n")
  10. out.close()
  11. end=time.time()
  12. pt=end-start
  13. print("运行耗时:",pt)
  14. try:
  15.     input("按回车退出")
  16. except SyntaxError:
  17.     pass
复制代码

TOP

看楼上 的名字 眼熟

TOP

回复 5# wosliming


我先来5个方法
  1. sed "$!N;N;s/\n/ /g" 1.txt > 2.txt
复制代码
  1. gawk "{ORS=NR%3?\" \":RS}1" 1.txt > 2.txt
复制代码
  1. gawk "NR%3{printf $0\" \";next}1" 1.txt > 2.txt
复制代码
  1. gawk "{printf (NR%3)?$0\" \":$0\"\n\"}" 1.txt > 2.txt
复制代码
  1. gawk "{if(NR%3!=0)ORS=\" \";else ORS=\"\n\"}1" 1.txt > 2.txt
复制代码
1

评分人数

TOP

回复 5# wosliming


    啥意思?代码不就是这样的么

TOP

回复 5# wosliming


    哈哈,就是补个空格。
我最近一般只写python程序,不写bat了。

TOP

回复 3# flyinnet9

如果数据一定是三个的倍数,这样程序会好写一些吗?

TOP

回复 2# 依山居

按照这样排下去就好了, 假如是5个数

1 1 1
2 2

这样,,,可以实现吗?

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in (log.txt) do (
  4.   set /a n+=1
  5.   set /p =%%a <nul
  6.   if !n!==3 (
  7.     echo.
  8.     set n=
  9.   )
  10. )
复制代码

TOP

要是不够3怎么处理。

TOP

返回列表