Board logo

标题: [文本处理] [已解决]批处理如何让文本中奇、偶数行合并成一行 [打印本页]

作者: batpro    时间: 2011-6-17 17:51     标题: [已解决]批处理如何让文本中奇、偶数行合并成一行

本帖最后由 batpro 于 2011-6-22 22:30 编辑

说明:鉴于旧贴有表达不清的嫌疑,现修改题目要求,忘高手搭救!

1.txt中【原始文本】
  1. [AmdK8 Compatible Device / AmdK8][Stopped/Manual Start]
  2. <System32\drivers\amdk8.sys><Advanced Micro Devices>
  3. [aswFsBlk / aswFsBlk][Running/Auto Start]
  4.   <system32\DRIVERS\aswFsBlk.sys><ALWIL Software>
  5. [NDIS Miniport Driver for Atheros L2 Fast Ethernet Controller / AtcL002][Running/Manual Start]
  6.   <system32\DRIVERS\l251x86.sys><Atheros Communications, Inc.>
复制代码
如何得到这样的2.txt:


2.txt的内容为
  1. [AmdK8 Compatible Device / AmdK8][Stopped/Manual Start]<System32\drivers\amdk8.sys><Advanced Micro Devices>
  2. [aswFsBlk / aswFsBlk][Running/Auto Start]<system32\DRIVERS\aswFsBlk.sys><ALWIL Software>
  3. [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 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (
  4.     "<system32\DRIVERS\eamon.sys><N/A>"
  5.     "<system32\DRIVERS\easdrv.sys><N/A>"
  6.     "<system32\DRIVERS\epfwtdir.sys><N/A>"
  7. ) do set %%~i=#
  8. for /f "tokens=*" %%i in (1.txt) do (
  9.     if defined %%i (
  10.         >>2.txt echo !last_line!             %%i
  11.         >>3.txt echo 驱动名称:!last_line!
  12.         >>3.txt echo 对应路径:%%i
  13.     )
  14.     set last_line=%%i
  15. )
  16. pause
复制代码

作者: Batcher    时间: 2011-6-17 19:05

  1. 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

  1. 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 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. cd.>2.txt
  3. set n=1
  4. FOR /f "tokens=*" %%1 in (1.txt) do (
  5.                   if !n!==1 (
  6.                    set /p=%%1<nul >>2.txt
  7.                    )  else (
  8.                    echo %%1>>2.txt
  9.                    set n=0
  10.                    )
  11.          set /a n+=1
  12.           )
复制代码
自己写语法错了,改了,可以达到效果不过 !^等特殊符号过不了关
作者: batpro    时间: 2011-6-22 09:09

7# mxxcgzxxx


已测试,失败
作者: caruko    时间: 2011-6-22 11:34

本帖最后由 caruko 于 2011-6-22 11:57 编辑
  1. @echo off>2.txt&set n=1
  2. FOR /f "delims=" %%1 in (1.txt) do (
  3. 2>nul    set /a n+=1,f=n%%2,1/f&&echo,%%1||set/p=%%1<nul
  4. ) >>2.txt
复制代码
已测试
作者: mxxcgzxxx    时间: 2011-6-22 12:45

7改过了,测试达效果,不过如果有!^就不能显示了
作者: Batcher    时间: 2011-6-22 12:59

  1. 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

  1. @echo off
  2. for /f "tokens=*" %%a in (1.txt) do (
  3.    set line=%%a
  4.    setlocal enabledelayedexpansion
  5.    set "out=!out!!line!"
  6.    set /a n=!n,"1/n"||echo !out!&&set out=
  7.    for /f "tokens=1*" %%b in ("!n! !out!") do (
  8.       endlocal
  9.       set "n=%%b"
  10.       set "out=%%c"
  11.    )
  12. )>2.txt 2>nul
复制代码





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