Board logo

标题: [文本处理] 批处理如何删除txt文本中大于或小于10个字符的行? [打印本页]

作者: cm535    时间: 2011-7-23 20:38     标题: 批处理如何删除txt文本中大于或小于10个字符的行?

如何删除txt中大于 10 位数或小于 10 位数的行?请教各位高手啊?在此,先谢谢了!
txt文件内容如下:

1234567890
adassdscxv
abcdefghij
_+";?.,asd
123456789001234
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345
0987
aad

只有十个数字或字母的是前面四排,批处理后,只要是大于10位和小于10位数的行全部删除。
就是说,除了前面四排,后面都不要。

CUer老大在二楼的代码可以完美解决下面 a.txt 编码格式的文件,也就是每组数字后面都有一个回车的文件。
但无法解决aa.txt这种编码格式的文件,这种文件是BT4下的密码文件,我不知道那个黑色的方块是如何打出来的,不能复制,所以无法替换为回车符。
请问aa.txt是什么编码形式的txt文件,怎样和正常的txt文件相互转换?
肯请各位老大帮忙,多谢多谢!
作者: CUer    时间: 2011-7-23 20:41

  1. findstr "^..........$" a.txt >b.txt
复制代码

作者: cm535    时间: 2011-7-24 01:00

谢谢CUer老大,不知是什么原因,用你以上的代码,删除我给的上面的txt文件,没有一点问题!但是,我的实际txt文件有25万多行,2.5M大小。执行代码后,产生的b.txt为0字节,空白的!盼解决!多谢多谢老大啊!!!
作者: cm535    时间: 2011-7-24 01:06

txt内容改为如下数字后,执行代码b也为0字节

00000000
000000000
0000000000
00000000000
000000000000
0000000000000
00000000000000
000000000000000
0000000000000000
0000000000000000000000
000000000000000000000000
0000000000000000000000000
作者: mxxcgzxxx    时间: 2011-7-24 09:09

代码没错,你会不会文件名弄错了
还有就是文件格式不对
作者: cm535    时间: 2011-7-24 11:10

楼上说得对,帮我找到原因了。确实是格式不对!但我不知道怎么把格式改过来!截图如下:
正常的文件截图:

1234567890
adassdscxvv
abcdefghij
_+";?.,asd
123456789001234
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345
0987
aad


不能使用,需要转格式的文件截图:

我把这个txt文件的内容粘贴如下,一点都看不出格式不一样
00000000
000000000
0000000000
00000000000
000000000000
0000000000000
00000000000000
000000000000000
0000000000000000
0000000000000000000000
000000000000000000000000
0000000000000000000000000
我怎样把格式改成为第一个图那样呢?请高手指点啊!在此多谢多谢了!!!
作者: cm535    时间: 2011-7-24 11:12

补正常文件截图
作者: CUer    时间: 2011-7-24 12:10

回复 6# cm535
  1. sed "/^.\{10\}$/!d" a.txt >b.txt
复制代码

作者: cm535    时间: 2011-7-24 15:10

回复 6# cm535 sed "/^.\{10\}$/!d" a.txt >b.txt
复制代码

CUer老大,我试了一下,还是不行!
这是我的txt文件,请老大试一试,多谢多谢了!非常感谢!
作者: tmplinshi    时间: 2011-7-24 15:52

好难理解...

===========================================
如何删除txt中大于10位和小于10位的数字行?


按这个要求,结果应该是红色部分被删除:

1234567890
adassdscxvv
abcdefghij
_+";?.,asd
123456789001234 ← 大于 10 位的数字行
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345 ← 小于 10 位的数字行
0987 ← 小于 10 位的数字行
aad

===========================================
可是你最后一句却说:
就是说,除了前面四排,后面都不要。

结果为:
1234567890
adassdscxvv
abcdefghij
_+";?.,asd
123456789001234
xcvfxbvfvcbbmn,hjkhkl
sdgdfgfdhgflkili66545
abcdefghijklllsa
0998766666dsgdsg
12345
0987
aad

这样看来的话,楼主的意思是只保留 10 个字符的行,可是第二行却是 11 个字符的。。

理解你的题意真是太痛苦了...
===========================================
你弄错了两个地方:
    1. 应该是删除大于 10 位数或小于 10 位数的行,而不是“如何删除txt中大于10位和小于10位的数字行?”
    2. 测试数据不小心弄错了,第二行多了一位。
===========================================
如果是这么理解的话,希望楼主在顶楼更新一下,以免后来者痛苦。
作者: Batcher    时间: 2011-7-24 18:27

回复 9# cm535


请把附件上传到顶楼,以便他人下载测试。
作者: tmplinshi    时间: 2011-7-24 19:10

回复 6# cm535 sed "/^.\{10\}$/!d" a.txt >b.txt
复制代码

CUer老大,我试了一下,还是不行!
这是我 ...
cm535 发表于 2011-7-24 15:10



    我测试是可以的。不会没下载 sed 吧?
作者: CUer    时间: 2011-7-24 19:11

回复 9# cm535


我试了,行。
可能是你的sed版本有问题吧。我用的4.2.1
作者: tmplinshi    时间: 2011-7-24 19:17

本帖最后由 tmplinshi 于 2011-7-24 19:39 编辑

aa.txt 里面只有换行符(0A),没有回车符(0D)。

多谢 CUer 提醒。more 有极限值,6 万多行的时候会暂停。所以以下命令不能处理楼主的文本。
  1. more aa.txt | findstr "^..........$" >aa_10.txt
复制代码

作者: CUer    时间: 2011-7-24 19:21

回复 14# tmplinshi


3楼说实际txt文件有25万多行,more命令不是有限制吗?
作者: cm535    时间: 2011-7-24 19:22

sed放在系统的哪里啊?我还真不知道有没有?怎样看版本号。老大发一个给我吧!
作者: tmplinshi    时间: 2011-7-24 19:30

回复  tmplinshi


3楼说实际txt文件有25万多行,more命令不是有限制吗?
CUer 发表于 2011-7-24 19:21



    忘记了...
作者: tmplinshi    时间: 2011-7-24 19:31

回复 16# cm535


GNU sed v4.0.7 单文件版(使用 -i 参数不生成备份文件)
http://bathome.net/thread-13353-1-1.html
作者: CUer    时间: 2011-7-24 19:37

回复 16# cm535


放在当前目录或者system32文件夹下
作者: cm535    时间: 2011-7-24 19:38

我搜索了一下,还真没有sed,

findstr的版本为5.1.2600

我下了一个,已经搞定!!!可以正常删除!多谢多谢老大!

aa.txt是什么编码格式,可以与常用的txt格式相互转换吗?
作者: CUer    时间: 2011-7-24 19:40

回复 20# cm535


试试Ultra Edit或者Notepad++之类的吧,应该都行。
作者: cm535    时间: 2011-7-24 22:43

非常感谢CUer及斑竹!
另外,如果是要删除txt中大于 12 位的数和小于 8 位数的行,又怎么办呢?不好意思,尽给你们出难题!!!

能不能帮我做个批处理,转换txt文件的回车符为换行符,换行符也可以转换为回车符!多谢了!
作者: CrLf    时间: 2011-7-24 22:50

本帖最后由 CrLf 于 2011-7-24 22:53 编辑

回复 22# cm535


    纯批也可以完成 ansi 与 unicode 互转,也可以替换回车符与换行符,只是好像难以判断相邻的一对回车换行谁在前谁在后。
    删除大于 12 字节和小于 8 字节的行(是字节不是字符):
  1. findstr /v /x "......... .......... ..........." 1.txt
  2. ::用 findstr 的话,纯粹就是个体力活...
复制代码

作者: tmplinshi    时间: 2011-7-24 23:08

回复 22# cm535


转换成标准的换行(0D0A):
  1. sed -i "s/$/\r/" aa.txt
复制代码

作者: tmplinshi    时间: 2011-7-24 23:13

本帖最后由 tmplinshi 于 2011-7-24 23:14 编辑
非常感谢CUer及斑竹!
另外,如果是要删除txt中大于 12 位的数和小于 8 位数的行,又怎么办呢?不好意思, ...
cm535 发表于 2011-7-24 22:43



保留 8~12 位的行:(直接修改文本)
  1. sed -i "/^.\{8,12\}$/!d" aa.txt
复制代码

作者: cm535    时间: 2011-7-24 23:21

本帖最后由 cm535 于 2011-7-24 23:57 编辑

quote]回复  cm535


    纯批也可以完成 ansi 与 unicode 互转,也可以替换回车符与换行符,只是好像难以判断 ...
CrLf 发表于 2011-7-24 22:50 [/quote]



运行了,不行!2.5M的文件没有减小,打开看了,与原来没有区别!还是要谢谢你哦!CrLf老大!
作者: cm535    时间: 2011-7-24 23:50

本帖最后由 cm535 于 2011-7-24 23:54 编辑

24楼及25楼的代码都运行成功,多谢tmplinshi老大,换行符转换成标准的回车符,太好了啊!

请问怎么转回来呢?即回车符转换成标准的换行符,什么搞?

这个论坛真是太好了!高手真多啊!佩服佩服!多谢多谢各位高手!
作者: tmplinshi    时间: 2011-7-25 11:39

请问怎么转回来 ...
cm535 发表于 2011-7-24 23:50
  1. sed -i "s/$//" aa.txt
复制代码

作者: cm535    时间: 2011-7-25 12:35

谢谢tmplinshi斑竹,28楼代码试过,转换很快,很好!




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