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

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

[复制链接]
发表于 2015-11-11 12:16:27 | 显示全部楼层 |阅读模式
本帖最后由 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

求帮忙!!

先谢过了

评分

参与人数 1PB -2 收起 理由
pcl_test -2 勿发无意义的标题

查看全部评分

发表于 2015-11-11 13:38:52 | 显示全部楼层
要是不够3怎么处理。
发表于 2015-11-11 13:47:40 | 显示全部楼层
  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. )
复制代码
 楼主| 发表于 2015-11-11 13:48:47 | 显示全部楼层
回复 2# 依山居

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

1 1 1
2 2

这样,,,可以实现吗?
 楼主| 发表于 2015-11-11 13:50:28 | 显示全部楼层
回复 3# flyinnet9

如果数据一定是三个的倍数,这样程序会好写一些吗?
发表于 2015-11-11 14:03:43 | 显示全部楼层
回复 5# wosliming


    哈哈,就是补个空格。
我最近一般只写python程序,不写bat了。
发表于 2015-11-11 14:09:33 | 显示全部楼层
回复 5# wosliming


    啥意思?代码不就是这样的么
发表于 2015-11-11 14:22:29 | 显示全部楼层
回复 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技术 +1 收起 理由
依山居 + 1 不要太好看。

查看全部评分

发表于 2015-11-11 14:46:13 | 显示全部楼层
看楼上 的名字 眼熟
发表于 2015-11-11 16:39:30 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-11-11 16:54:57 | 显示全部楼层
回复 3# flyinnet9


代码很好用,但是我不是太明白最后两行的意思,能给解释一下不
发表于 2015-11-11 17:08:23 | 显示全部楼层
回复 11# wosliming


    如果取了3个数,就回车,然后清除计数器重新计数
发表于 2015-11-11 20:21:23 | 显示全部楼层
本帖最后由 依山居 于 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
复制代码
发表于 2015-11-12 08:49:52 | 显示全部楼层
本帖最后由 依山居 于 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 11:12 , Processed in 0.032509 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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