标题: [文本处理] [已解决]批处理如何让文本中奇、偶数行合并成一行 [打印本页]
作者: batpro 时间: 2011-6-17 17:51 标题: [已解决]批处理如何让文本中奇、偶数行合并成一行
本帖最后由 batpro 于 2011-6-22 22:30 编辑
说明:鉴于旧贴有表达不清的嫌疑,现修改题目要求,忘高手搭救!
1.txt中【原始文本】- [AmdK8 Compatible Device / AmdK8][Stopped/Manual Start]
- <System32\drivers\amdk8.sys><Advanced Micro Devices>
- [aswFsBlk / aswFsBlk][Running/Auto Start]
- <system32\DRIVERS\aswFsBlk.sys><ALWIL Software>
- [NDIS Miniport Driver for Atheros L2 Fast Ethernet Controller / AtcL002][Running/Manual Start]
- <system32\DRIVERS\l251x86.sys><Atheros Communications, Inc.>
复制代码
如何得到这样的2.txt:
2.txt的内容为- [AmdK8 Compatible Device / AmdK8][Stopped/Manual Start]<System32\drivers\amdk8.sys><Advanced Micro Devices>
- [aswFsBlk / aswFsBlk][Running/Auto Start]<system32\DRIVERS\aswFsBlk.sys><ALWIL Software>
- [NDIS Miniport Driver for Atheros L2 Fast Ethernet Controller / AtcL002][Running/Manual Start]<system32\DRIVERS\l251x86.sys><Atheros Communications, Inc.>
复制代码
谢谢
作者: tmplinshi 时间: 2011-6-17 18:06
本帖最后由 tmplinshi 于 2011-6-17 18:17 编辑
- @echo off
- setlocal enabledelayedexpansion
-
- for %%i in (
- "<system32\DRIVERS\eamon.sys><N/A>"
- "<system32\DRIVERS\easdrv.sys><N/A>"
- "<system32\DRIVERS\epfwtdir.sys><N/A>"
- ) do set %%~i=#
-
- for /f "tokens=*" %%i in (1.txt) do (
- if defined %%i (
- >>2.txt echo !last_line! %%i
- >>3.txt echo 驱动名称:!last_line!
- >>3.txt echo 对应路径:%%i
- )
- set last_line=%%i
- )
-
- pause
复制代码
作者: Batcher 时间: 2011-6-17 19:05
- grep -B 1 "<system32\\DRIVERS\\eamon.sys>" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
作者: batpro 时间: 2011-6-17 19:56
谢谢大家 辛苦 ,尽管还是不懂
作者: Batcher 时间: 2011-6-21 21:10
- sed "$!N;s/\n//" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
作者: batpro 时间: 2011-6-21 22:35
5# Batcher
谢谢管理员,终于明白了sed的强大,让困扰我好多天的问题得以解决,谢谢
顺便问一句,如果不借助第三方工具,单纯用bat能解决这个问题么?
作者: mxxcgzxxx 时间: 2011-6-22 07:18
本帖最后由 mxxcgzxxx 于 2011-6-22 12:44 编辑
- @echo off&setlocal enabledelayedexpansion
- cd.>2.txt
- set n=1
- FOR /f "tokens=*" %%1 in (1.txt) do (
- if !n!==1 (
- set /p=%%1<nul >>2.txt
- ) else (
- echo %%1>>2.txt
- set n=0
- )
- set /a n+=1
- )
复制代码
自己写语法错了,改了,可以达到效果不过 !^等特殊符号过不了关
作者: batpro 时间: 2011-6-22 09:09
7# mxxcgzxxx
已测试,失败
作者: caruko 时间: 2011-6-22 11:34
本帖最后由 caruko 于 2011-6-22 11:57 编辑
- @echo off>2.txt&set n=1
- FOR /f "delims=" %%1 in (1.txt) do (
- 2>nul set /a n+=1,f=n%%2,1/f&&echo,%%1||set/p=%%1<nul
- ) >>2.txt
复制代码
已测试
作者: mxxcgzxxx 时间: 2011-6-22 12:45
7改过了,测试达效果,不过如果有!^就不能显示了
作者: Batcher 时间: 2011-6-22 12:59
- gawk "NR%2{printf $0;next}1" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
作者: CrLf 时间: 2011-6-22 13:42
- @echo off
- for /f "tokens=*" %%a in (1.txt) do (
- set line=%%a
- setlocal enabledelayedexpansion
- set "out=!out!!line!"
- set /a n=!n,"1/n"||echo !out!&&set out=
- for /f "tokens=1*" %%b in ("!n! !out!") do (
- endlocal
- set "n=%%b"
- set "out=%%c"
- )
- )>2.txt 2>nul
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |