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 "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 に答える
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 に答える