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'>" |
|