中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [转贴]cmd下的一些文本处理 上一主题 | 下一主题
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『楼 主』:  [转贴]cmd下的一些文本处理

cmd下的一些文本处理
http://bbs.et8.net/bbs/showthread.php?t=651590

开头跑个题,插播个广告,隆重推出,铛铛铛铛~~~,excel!excel!excel!
m$那个电子表格软件?提它做什么?这题太跑了吧?
做行文本处理!排序,过滤,中间插入,翻个身,倒个个,奇偶行交换,抽取1,4,9..行,合并,交叉合并,首行填充奇数行,等等72变
相比xnix shell,各种文本编辑软件,决不逊色,入门还更容易,帮助文件更为详尽,实为居家旅行,杀人越货的强手货,没有概念的赶紧试用。
使用时需要的仅仅是个思路。思路..思路很重要!

言归正传,还是cmd,用它做文本处理,只能算是勉为其难,凑合着用吧,常做深呼吸,小心给"憋"着了

====================================================================
1.列表多个文本文件文件名+文件内容
2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002
3.构造http://..001|002|003../01|02|03.htm序列
4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式
5.将IE收藏夹导出为CSV格式文档
6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有,而all.txt里有的文件列表
7.文本文件中的单词实现全文自动统计并排序
8.统计一个文本文件中某一单词出现的次数?
9.GB和Maxthon群组转换
10.合并2个字幕文本文件
11.snap&compare 多个html的固定内容
=====================================================================

1.列表多个文本文件文件名+文件内容


find /v "" *.txt >list.txt


*继续观察自带命令的有价值输出
------------------------------------------------------------
2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002


for /l %i in (1,1,9) do @echo text00%i >00%i.txt
for /l %i in (10,1,99) do @echo text0%i >0%i.txt
for /l %i in (100,1,999) do @echo text%i >%i.txt


*分段补零
-----------------------------------------------------------------
3.构造http://..001|002|003../01|02|03.htm文件,以下内容保存为.bat文件执行
代码:
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1001,1,1162) do for /l %%j in (101,1,112) do @(set s=%%i && set t=%%j && echo ^<td^>^<a href="http://www.sergeaura.net/TGP/!s:~1,3!/images/!t:~1,2!.jpg"^>!s:~1,3!!t:~1,2!.jpg^</a^>^</td^> >>file.htm)
endlocal*嵌套for,两组变量
*00x,0x序号构造,加减高位 ccfer su99原创
------------------------------------------------------------
4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式


for /f "tokens=1,2,3 delims=:/" %i in ('findstr /n "." 文本.txt') do echo [InternetShortcut] >>%k_%i.url && echo url=http://%k >>%k_%i.url


*没什么特别的

------------------------------------------------------------
5.将IE收藏夹导出为CSV格式文档,以下内容保存为.bat文件执行
代码:
for /f "tokens=1,3,4 delims=:" %%i in ('findstr /s "http" *.url') do if %%k neq 0 (echo %%i,http:%%j:%%k >>list.csv) else echo %%i,http:%%j >>list.csv*findstr /s *.*得到文件相对路径,利用之

------------------------------------------------------------
6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有,而all.txt里有的文件列表
#有txt文件 all.txt 和 a.txt 里面存放的是文件列表,a.txt 是 all.txt 的子集,求出a.txt里面没有,而all.txt里有的文件列表


for /f "delims=" %i in (all.txt) do @findstr /x /c:"%i" a.txt >nul || @findstr /x /c:"%i " b.txt >nul || @echo %i>>b.txt


*连续的||..||应用

------------------------------------------------------------
7.文本文件中的单词实现全文自动统计并排序

一个文本文件,每行有一个单词或字符串(有重复的),几千行。用word或UE只能做到按字典顺序重新排列、或选中某词统计其个数。

有没有一种方法能自动统计每一不同单词的出现次数,并输出结果列表(加按出现次数排序就更好了)。

源文件内容:
abc
adfg
aew
dew
abc
abc
aew
adfg
abc
dew
adfg
ewq
abc
自动统计并排序后输出列表(假设):

abc    5
adfg    3
aew    2
dew    2
ewq    1

设输入文本为tmp


for /f "delims=" %i in (tmp) do @echo %i >> %i.txt
@findstr /n "." *.txt >tmp1
for /f "tokens=1-3 delims=:" %i in (tmp1) do @echo %k %j>%i
copy *.txt result.txt


*分类汇总,excel,awk。。不合用的时候,cmd顶住
*行号=数量
------------------------------------------------------------
8.统计一个文本文件中某一单词出现的次数?,以下内容保存为.bat文件执行

find_word.bat
代码:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /p file=请输入要查询的文件名:
set /p name=请输入要查询的单词:
set /a n=0

:loop
set /a n=n+1
for /f "tokens=%n% delims=,;.()[]{}!? " %%i in (%file%) do if /i %%i equ %name% echo %name% >>%name%.txt
if %n% neq 255 (goto loop) else goto end

:end
for /f "delims=:" %%i in ('findstr /n "." %name%.txt') do set x=%%i
echo %name%出现的次数为:%x%
del %name%.txt
endlocal*for进行单词匹配,慢死人的那种,纯属yy
------------------------------------------------------------
9.GB和Maxthon群组转换,以下内容保存为.bat文件执行

GB和Maxthon群组转.bat
代码:
@echo off
:common

setlocal ENABLEDELAYEDEXPANSION
findstr "CaptorGroup" *.cgp  && goto max_gb ||  goto gb_max

:max_gb

rd /s/q gb_group
md gb_group
for %%i in (*.cgp) do echo [Group]>>gb_group\\%%i
for %%a in (*.cgp) do for /f "tokens=1-4 delims==:" %%i in ('findstr /n "=" "%%a                " ') do set /a n=%%i-2 && echo name!n!=%%j>>gb_group\%%a && echo ^url!n!=%%k:%%l>>gb_group\%%a
goto end

:gb_max

rd /s/q max_group
md max_group
for %%a in (*.cgp) do for /f "tokens=2 delims==" %%i in ('findstr "." "%%a               " ') do echo %%i>>max_group\%%~na.txt
for %%a in (max_group\*.txt) do echo [CaptorGroup]>>max_group\%%~na.cgp
for %%a in (max_group\*.txt) do for /f "tokens=1,2 delims=: " %%i in ('findstr "." "%%a               " ') do if "%%i" neq "http" (set n=%%i) else (if "%%i" == "http" echo !n!=http:%%j>>max_group\%%~na.cgp)
del /q max_group\*.txt
goto end
endlocal
:end

cls
echo 转换完成,请查看子目录
pause
exit
*两行并一行,一行拆两行
------------------------------------------------------------
10.合并2个字幕文本文件
合并2个字幕文本文件

原始文件1如下
代码:
1
00:00:17,920 --> 00:00:18,625
Charlie?

2
00:00:19,858 --> 00:00:20,606
Charlie?

3
00:00:21,635 --> 00:00:23,140
和我一块儿去散步怎样?

4
00:00:23,739 --> 00:00:24,456


5
00:00:24,972 --> 00:00:27,317
不,不去,Locke,今天我哪儿都不想去

原始文件2如下
代码:
1
00:00:17,820 --> 00:00:18,525
Charlie?

2
00:00:19,758 --> 00:00:20,506
Charlie?

3
00:00:21,535 --> 00:00:23,040
How about you and I go for a walk?

4
00:00:23,639 --> 00:00:24,356
No.

5
00:00:24,872 --> 00:00:27,217
No, thanks, Locke. I think I'm gonna stay in today.

要求合并后的文件如下
代码:
1
00:00:17,920 --> 00:00:18,625
Charlie?
Charlie?
2
00:00:19,858 --> 00:00:20,606
Charlie?
Charlie?
3
00:00:21,635 --> 00:00:23,140
和我一块儿去散步怎样?
How about you and I go for a walk?
4
00:00:23,739 --> 00:00:24,456

No.
5
00:00:24,972 --> 00:00:27,317
不,不去,Locke,今天我哪儿都不想去
No, thanks, Locke. I think I'm gonna stay in today.

想把中英文字幕合并起来,边看片子还可以边学学英文
其实软件上是可以同时加载2个字幕的,也可以实现要求
可是我现在看片子都是在Xbox上看,XBMC这个播放软件在同一时间只能支持一个srt字幕,所以才会有此要求

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

设文件名为file1.txt file2.txt,以下内容保存为.bat文件执行
fuck.bat
代码:
del 1.txt 2.txt all.txt 合并后文档.txt
echo 加一行 >2.txt
type file2.txt >>2.txt
copy file1.txt 1.txt
:#源文件准备

findstr /n "." 1.txt 2.txt >tmp.txt
:#合并源文件并添加行号

for /l %%i in (1,1,500) do findstr /r "^1.txt:%%i:" tmp.txt >>all.txt || findstr /r "^2.txt:%%i:" tmp.txt >>all.txt
:#分析,构造目标文件

for /f "tokens=3,* delims=:" %%i in (all.txt) do echo %%i%%j >>合并后文档.txt
:#滤除多余信息*交叉合并

------------------------------------------------------------
11.snap&compare 多个html的固定内容
有以下内容
http://www.abcd.com/pub/wrok1.html
http://www.abcd.com/pub/wrok2.html
http://www.abcd.com/pub/wrok3.html
.
..
...
http://www.abcd.com/pub/wrok(*).html

每个html,几乎整个html部分都是固定内容,除了我要监测的(文本方式打开)第225行,第38位开始,75位结束这段,它们
有不定时的改变,所有html更新的部分也许不止这一个地方,但我只想监测这一段

有没有软件或方法snap一次镜像,然后下次再snap后作出对上次snap的对比,得出哪个url的html内容监测段作出了改变?

=========================
无错误控制,以下内容保存为.bat文件执行

snap&compare.bat
代码:

@echo off

del 差异.txt 2>nul
copy /y snap.txt snap_old.txt 1>nul
:#清理及悲愤snap

:snap
echo ======%date% %time%====== >snap.txt
:#加入时间戳

set url=http://www.abcd.com/pub/wrok
:#url变量赋值

for /l %%i in (1,1,100) do curl %url%%%i.html | findstr /n "." | findstr /r "^225:" >>tmp.txt && echo %url%%%i >>tmp.txt
:#下载htm并过滤所需行

setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1* delims=:" %%i in (tmp.txt) do if "%%i"=="http" (echo %%i%%j !n! >>snap.txt) else set n=%%j
endlocal
:#整型快照

del tmp.txt
:#删除临时文件


:goto
if not exist snap_old.txt cls && echo ======第一次建立快照文件snap^.txt^,请再次运行snap^&compare^.cmd获取文件差异====== && pause && goto end
:#判断是否存在对比快照,如不存在则不进行差异比较


:compare

findstr /n "." snap.txt >tmp1.txt
findstr /n "." snap_old.txt >tmp2.txt
:#为snap文本加入行号

for /l %%i in (2,1,100) do findstr /r "^%%i:" tmp1.txt tmp2.txt >>tmp3.txt
:#以行号为序合并tmp文件

findstr /r "1:" tmp*.txt >>差异.txt
:#添加时间戳

setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1* delims=:" %%i in (tmp3.txt) do if %%i==tmp1.txt (set n=%%j) else (if %%j neq !n! echo %%j>>差异.txt)
endlocal
:#比较文本,计算差异行及行号

del tmp*.txt
:#清理临时文件

cls && echo ===========完成差异比较,请查看"差异.txt"=========== && pause

end:*两行并一行,相似文本比较




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-21 21:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsion
高级用户




积分 789
发帖 310
注册 2004-9-2
状态 离线
『第 2 楼』:  

cmd博大精深,非穷极一生不可也。

2006-8-10 11:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NeoASlan
初级用户





积分 41
发帖 16
注册 2006-10-1
状态 离线
『第 3 楼』:  

我倒认为cmd业余的时候学学,能做些辅助工作就行了。
不可太入迷啊。。。

2006-10-6 11:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 4 楼』:  

同意楼上的看法。所以还是脚本爽些




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-6 19:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
amtf15
初级用户





积分 26
发帖 17
注册 2008-10-6
状态 离线
『第 5 楼』:  

学习了,谢谢先

2009-3-14 18:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abddt
新手上路





积分 3
发帖 3
注册 2009-4-3
状态 离线
『第 6 楼』:  

不知道在说什么

2009-4-3 23:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: