0

我有一个行数未知的文本文件,有些行以模式开头,我想将以模式开头的行与下一行连接起来,例如

name=jimmy
age=19 id=23423 site=www.xxx.com
bla bla
name=katy
age=15 id=234543 site=www.yyy.com
name=ross
age=29 id=54564 site=www.ZZZZ.com

输出应该是

name=jimmy age=19 id=23423 site=www.xxx.com
 bla bla bla
name=katy age=15 id=234543 site=www.yyy.com
name=ross age=29 id=54564 site=www.ZZZZ.com

所以模式是“名称”,它应该加入下一行我想使用 sed 但我不知道如何帮助

4

2 回答 2

1
@echo off
setlocal EnableDelayedExpansion
set pattern=name
set patternLen=4
call :ProcessFile < input.txt > output.txt
goto :EOF

:ProcessFile
set line=
set /P line=
if not defined line exit /B
if "!line:~0,%patternLen%!" equ "%pattern%" (
   set /P nextLine=
   set "line=!line! !nextLine!"
)
echo !line!
goto ProcessFile

以前的批处理文件的问题是它在输入文件的第一个空行处结束。但是,如果需要,可以修复此问题。

于 2012-07-02T01:48:16.847 回答
1

好吧,这是一个简单的脚本:

@echo off
setlocal enabledelayedexpansion
set "INPUT_FILE=input.txt"
set "OUTPUT_FILE=output.txt"
set prev=
for /f "tokens=*" %%f in (%INPUT_FILE%) do (
    for /f "tokens=1,2 delims==" %%g in ("%%f") do (
        if "!prev!" neq "" (
            echo !prev! %%f >>%OUTPUT_FILE%
            set prev=
        ) else (
            if "%%g" equ "name" (
                set prev=%%f
            ) else (
                echo %%f >>%OUTPUT_FILE%
                set prev=
            )
        )
    )
)
于 2012-07-01T23:39:13.863 回答