Board logo

标题: [文本处理] [已解决]批处理如何从以下格式文件得到指定的格式? [打印本页]

作者: llsilver    时间: 2012-6-13 20:29     标题: [已解决]批处理如何从以下格式文件得到指定的格式?

是处理url用的,大概有400万行,原本想用excel筛选功能,手动处理,累一点就累一点吧,结果excel不支持这么多行,我晕。
需要处理的格式如下:
  1. http://www.baidu.com/957
  2. http://www.baidu.com/4759
  3. http://www.baidu.com/?page=14
  4. http://www.baidu.com/archive/123
  5. http://www.baidu.com/archive/asd
  6. http://www.baidu.com/category/232
  7. http://www.baidu.com/category/lalala
  8. http://www.baidu.com/entry/1223
  9. http://www.baidu.com/entry/aaa
  10. http://www.baidu.com/unknow-----------------------(这里的unknown表示无特征英文字母)
  11. http://www.baidu.com/111%3Fxxx
复制代码
想要用批处理,有3种需求:

需求1:只保留这样的url
  1. http://www.baidu.com/957
  2. http://www.baidu.com/4759
复制代码
需求2:只保留这样的URL
  1. http://www.baidu.com/archive/123
  2. http://www.baidu.com/archive/asd
复制代码
需求3:只保留这样的URL
  1. http://www.baidu.com/category/232
  2. http://www.baidu.com/category/lalala
复制代码
需求2、3估计很好实现,最重要的是需求1。。。

不管结果如何,先谢过所有看过此贴的朋友。
作者: CrLf    时间: 2012-6-13 20:40

本帖最后由 CrLf 于 2012-6-13 21:25 编辑
  1. @echo off
  2. findstr /x "http://[^/]*/[0-9]*" url.txt>1.txt
  3. findstr /x "http://[^/]*/archive/.*" url.txt>2.txt
  4. findstr /x "http://[^/]*/category/.*" url.txt>3.txt
复制代码

作者: llsilver    时间: 2012-6-13 21:21

回复 2# CrLf
谢谢斑斑,如果网址不是只有baidu.com
如果还有21.cn
google.com.hk
cctv.cn
sina.com.cn
这样的呢,又该如何写?
呵呵,得寸进尺了
作者: CrLf    时间: 2012-6-13 21:24

回复 3# llsilver


    代码已修改,建议以后在顶楼将要求一次性说清,避免绕弯子。
作者: llsilver    时间: 2012-6-13 21:43

回复 4# CrLf
谢谢斑斑,下次一定注意
作者: poter    时间: 2012-6-14 19:18

我觉得自己挺有创造性的,这样都可以泡制出来

@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%i in ('findstr /v "page" url.txt') do (
        set a=%%i&set "a=!a:/= !"
        for %%j in (!a!) do (
        if "%%j"=="archive" echo %%i>>2.txt
        if "%%j"=="category" echo %%i>>3.txt
        set /a b=%%j+0 2>nul
        if "!b!" gtr "0" echo %%i>>1.txt
        )
)
作者: poter    时间: 2012-6-14 19:25

回复 2# CrLf


    大侠,[^/]代表是什么? 我看了cmd里的解释,什么补字符集,理解起来很头痛啊,有没有通俗易懂的说法?
作者: CrLf    时间: 2012-6-14 20:11

回复 7# poter


见:http://bbs.bathome.net/viewthread.php?tid=14682
假如将数字看作字符集下的一个集合,那么数字集的补集就是所有非数字字符,findstr 中的 [0-9] 匹配的是一个阿拉伯数字,比如 0,那么 [^0-9] 的意思(前者的补集)就是一个不是阿拉伯数字的字符,比如 b
作者: poter    时间: 2012-6-14 20:42

回复 8# CrLf


    原来是这样,那儿[^/]就代表所有非特殊符号的集合咯?

十分感谢!!
作者: CrLf    时间: 2012-6-14 20:45

回复 9# poter


    [^/] 代表除 / 之外的所有字符,因为 url 以 / 分节,所以 [^/]* 能够匹配一整节的内容




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