标题: [文本处理] 批处理如何将txt文件单列内容按指定指定行数合并成一行? [打印本页]
作者: wosliming 时间: 2015-11-11 12:16 标题: 批处理如何将txt文件单列内容按指定指定行数合并成一行?
本帖最后由 pcl_test 于 2016-7-30 18:42 编辑
各位 txt文件读取转置的时候想实现读取到第几个字符的时候就换行- for /f "tokens=1" %%b in (log.txt) do (
- set /p"=%%b "
- )<nul >>t2.txt
复制代码
这个实现转置可以,但是不知道怎么实现换行的动作,,
log.txt 里面只有一列数据,但是有几万行,,比方是这样的
1
1
1
2
2
2
3
3
3
想实现的是转置成行排列 读取到第三个就把剩下的放的下一行,再读取三个就再换行,这样
1 1 1
2 2 2
3 3 3
求帮忙!!
先谢过了
作者: 依山居 时间: 2015-11-11 13:38
要是不够3怎么处理。
作者: flyinnet9 时间: 2015-11-11 13:47
- @echo off
- setlocal enabledelayedexpansion
- for /f %%a in (log.txt) do (
- set /a n+=1
- set /p =%%a <nul
- if !n!==3 (
- echo.
- set n=
- )
- )
复制代码
作者: wosliming 时间: 2015-11-11 13:48
回复 2# 依山居
按照这样排下去就好了, 假如是5个数
1 1 1
2 2
这样,,,可以实现吗?
作者: wosliming 时间: 2015-11-11 13:50
回复 3# flyinnet9
如果数据一定是三个的倍数,这样程序会好写一些吗?
作者: 依山居 时间: 2015-11-11 14:03
回复 5# wosliming
哈哈,就是补个空格。
我最近一般只写python程序,不写bat了。
作者: flyinnet9 时间: 2015-11-11 14:09
回复 5# wosliming
啥意思?代码不就是这样的么
作者: DAIC 时间: 2015-11-11 14:22
回复 5# wosliming
我先来5个方法- sed "$!N;N;s/\n/ /g" 1.txt > 2.txt
复制代码
- gawk "{ORS=NR%3?\" \":RS}1" 1.txt > 2.txt
复制代码
- gawk "NR%3{printf $0\" \";next}1" 1.txt > 2.txt
复制代码
- gawk "{printf (NR%3)?$0\" \":$0\"\n\"}" 1.txt > 2.txt
复制代码
- gawk "{if(NR%3!=0)ORS=\" \";else ORS=\"\n\"}1" 1.txt > 2.txt
复制代码
作者: ads350668398 时间: 2015-11-11 14:46
看楼上 的名字 眼熟
作者: 依山居 时间: 2015-11-11 16:39
- """
- 生成一列一千万行文本
- 依山居 16:32 2015/11/11
- """
- import time
- start=time.time()
-
- out=open("a.txt","a+")
- for r in range(10000000):
- out.write(str(r)+"\n")
- out.close()
-
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
复制代码
作者: wosliming 时间: 2015-11-11 16:54
回复 3# flyinnet9
代码很好用,但是我不是太明白最后两行的意思,能给解释一下不
作者: flyinnet9 时间: 2015-11-11 17:08
回复 11# wosliming
如果取了3个数,就回车,然后清除计数器重新计数
作者: 依山居 时间: 2015-11-11 20:21
本帖最后由 依山居 于 2015-11-12 07:00 编辑
- """
- 一列文本转成三列
- 依山居 16:44 2015/11/11
-
- 题目来源 http://www.bathome.net/thread-38097-1-1.html
- """
- print("运行中..."*3)
- import time
- start=time.time()
- l=[]
- out=open("out.txt","w+")
- with open("a.txt") as f:
- txt=f.read()
- l=txt.rsplit()
- #print(l)
- #print(len(l))
- #计算长度,求余,尾部分不够三列的补空位。
- l=l+(3-len(l)%3)*[" "]
- #print(len(l))
- while l:
- #经测试前十万行数据一秒内就能完成。
- #数据量越大,字符串太长的不应该使用下面的写法。
- out.write(l[0]+" "+l[1]+" "+l[2]+"\n")
- del(l[0:3])
-
- out.close()
-
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
复制代码
作者: 依山居 时间: 2015-11-12 08:49
本帖最后由 依山居 于 2015-11-15 20:27 编辑
- """
- 一列文本进行字符串格式操作转成三列2
- 依山居 8:18 2015/11/12
-
- 相关资料: 飘逸的python - 增强的格式化字符串format函数
- http://blog.csdn.net/handsomekang/article/details/9183303
-
- 总结,我自己生成了百万行来测试,文本文件8M大,内容为1-999999
- 吐槽,改成列表解析百万行数据一秒能处理完,之前写的程序没法看了....
-
- """
- print("运行中..."*3)
- import time
- start=time.time()
-
- l=[]
- nl=[]
- ft=''
- out=open("out.txt","w+")
- with open("a.txt") as f:
- txt=f.read()
-
- end=time.time()
- pt=end-start
- print("运行耗时1:",pt)
-
- l=txt.rsplit()
-
- end=time.time()
- pt=end-start
- print("运行耗时2:",pt)
- d=[0,2,1]
- m=len(l)%3
- print(len(l),len(l)%3)
-
- l=l+(d[m])*["--"]
- print(len(l),len(l)%3)
- end=time.time()
- pt=end-start
- print("运行耗时3:",pt)
- #=======================================
-
- nl=["%s %s %s\n" % (l[r],l[r+1],l[r+2]) for r in range(0,len(l),3)]
-
- end=time.time()
- pt=end-start
- print("运行耗时4:",pt)
- #=======================================
- out.writelines(nl)
- out.close()
-
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |