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

[文本处理] 批处理怎样给文本添加序号及按行分割?


请问 findstr /n ".*" test.txt 这个命令添加行号时,

如何才能让按照 输入者指定一个数字开始列序号呢?

比如: 输入 100,  每行前的序号就从100开始向后排 ....

不求有上面的命令这么迅速, 但求尽量能快些,因为数据量委实很大.

请问sed命令完成上述的工作么?

还有,下面的命令有点小问题:

1、如果当前行以反斜杠“\”结束,则将下一行并到当前行末尾,并去掉原来行尾的反斜杠
sed -e :a -e "/\\$/N; s/\\\n//; ta" a.txt >b.txt     

这个命令也会同时删除TXT文档中所有的空行?

======================================================

2、 sed能否按照每6万条数据来分割TXT文档呢?

======================================================

已解决: sed = a.txt | sed "N;s/\n/|/" |find /v "" >abc.txt

询问的问题:


findstr /n ".*" test.txt   添加行号速度是很快的,

问题是如何才能不在行号后添加":"   而改为添加 "|" 这个符号呢?







[ 本帖最后由 youaoyi 于 2008-7-10 13:13 编辑 ]

关键问题是行数100000并不是可以确定的数据啊...

如果之前已经使用了 "sed = a.txt | sed "N;s/\n/|/" |find /v "" >b.txt"添加了行号,

是否能够在生成的 b.txt 文件中取到这个总行数值呢?

TOP

2、 sed能否按照每6万条数据来分割TXT文档呢?
假设总行数是100000行
:
  1. @echo off
  2. set /a z=100000
  3. :loop
  4. set /a n=m+1,m+=60000,wjm+=1
  5. sed -n "%n%,%m%p" a.txt|find /v "" >%wjm%.txt
  6. if %m% lss %z% goto loop
  7. pause
复制代码
技术问题请到论坛发帖求助!

TOP

已经修改标题,不知是否妥当.

TOP

首先请仔细阅读版规,再请修改标题。。。。
http://bathome.net/viewthread.php?tid=963&extra=page%3D1
技术问题请到论坛发帖求助!

TOP

那么请问sed命令可以做到上面的输入指定序号的工作么?

还有,下面的命令有点小问题:

1、如果当前行以反斜杠“\”结束,则将下一行并到当前行末尾,并去掉原来行尾的反斜杠
sed -e :a -e "/\\$/N; s/\\\n//; ta" a.txt >b.txt     

这个命令也会同时删除TXT文档中所有的空行?

======================================================

2、 sed能否按照每6万条数据来分割TXT文档呢?

======================================================

无关备查: 如果当前行以等号开头,将当前行并到上一行末尾,并以单个空格代替原来行头的“=”
sed -e :a -e "$!N;s/\n=/ /;ta" -e "P;D"

[ 本帖最后由 youaoyi 于 2008-7-10 11:25 编辑 ]

TOP

这个用findstr /n是做不到的,只有用for(除第三方工具外)
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p n=请输入初始行号
  3. for /f "delims=" %%i in (a.txt) do set /a n+=1&echo !n! ^|%%i
复制代码
***共同提高***

TOP

继续求教

请问 findstr /n ".*" test.txt 这个命令添加行号时,
如何才能让按照 输入者指定一个数字开始列序号呢?
比如: 输入 100,  每行前的序号就从100开始向后排 ....
不求有上面的命令这么迅速, 但求尽量能快些,因为数据量委实很大.

[ 本帖最后由 youaoyi 于 2008-7-10 08:32 编辑 ]

TOP

3楼已经说了,用findstr只要几秒,用for+findstr用了十几分钟还没完成。
那么zw兄的纯for应该也就是比for+findstr节约了几秒钟而以
其实对大的文件处理建议还是用外部工具,比如sed论坛的第三方软件就有下载的
30兆的文件不知道有多少行,我测试7万行耗时8秒,应该可以接受吧。。。
不过还是finstr快,只要1秒
:
  1. @echo off
  2. sed = a.txt | sed "N;s/\n/|/" |find /v "" >abc.txt
  3. start abc.txt
复制代码

[ 本帖最后由 随风 于 2008-7-7 18:10 编辑 ]
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2008-7-7 11:45 发表
呵呵,处理文本 findstr 是比 for 要快多了。

之所以效率低了这么多是因为随风用了for+findstr语式,兄弟可以试下如下代码,看效率怎么样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do set /a n+=1&echo !n! ^|%%i
复制代码

[ 本帖最后由 zw19750516 于 2008-7-7 16:41 编辑 ]
***共同提高***

TOP

呵呵,处理文本 findstr 是比 for 要快多了。
技术问题请到论坛发帖求助!

TOP

测试一个30兆的文本文件,

原来的命令几秒钟序号就添加完毕了,

上面的这条命令十几分钟后仍在处理中,

没能等到处理完毕 Ctrl + C 了 ....

TOP

没考虑a.txt内容有冒号开头的情况。
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do echo %%a ^| %%b
  3. pause
复制代码
技术问题请到论坛发帖求助!

TOP

返回列表