2015-07-03 37 views
0

我在的格式「的test.txt」文件之間的界線:批處理腳本提取特定的詞和重新格式化輸出文件

xdfdfdf 
ydffddf 
zddfdfd 
blah ... 
WordA 
12 
23 
45 
... 
32 
12 
65 
xdfdfdf 
ydffddf 
zddfdfd 
blah ... 
WordA 
54 
76 
67 
... 
68 
31 
85 
xdfdfdf 
ydffddf 
zddfdfd 
blah ... 
WordA 
89 
65 
45 
... 
32 
51 
75 
xdfdfdf 
ydffddf 
zddfdfd 
blah ... 
.... 

我想只提取數字下面的每個「wordA」,用跳過格式連續重新格式化數據,並生成一個輸出文件(如「Output.txt」)。必須注意的是,每個帶有數字數據的「wordA」下的行數是固定的(例如18行)。

結果應該是這種格式:

12 45 ... 32 65 
54 67 ... 68 85 
89 45 ... 32 75 
.... 

任何人可以幫助我通過?我找到了FindRepl.bat,但是,我無法使用我想要的。我更喜歡簡單而簡短。 我對批處理腳本編程知之甚少,也嘗試爲它編寫一個嵌套循環,但它不起作用。

@echo off 
setlocal enabledelayedexpansion 

SET InFile=Test2.txt 
SET OutFile=Output.txt 
IF EXIST %OutFile% del /F %OutFile% 

FOR /f "delims=:" %%a IN ('findstr /n "wordA" "%InFile%"') DO (
    SET /a first=%%a + 1 
    SET /a last=%%a + 18 
    SET i=0 
    SET ROW=!first! 

    FOR /f "skip=!first! delims=" %%b IN (%InFile%) DO (
     if !first! LEQ !last! set Data[!i!]=%%a 
     echo %%b 
    ) 
) 

endlocal 
+0

我明白你是在Windows環境。將其添加到標籤。 –

+0

您是否需要使用默認的Windows工具來完成此操作?你會考慮使用像Python這樣的腳本語言嗎?你有沒有使用awk(cygwin)這樣的文本處理工具? –

+0

@JosepValls:還有一個選項(* .exe),但我的第一優先級是將代碼寫入批處理腳本(* .bat)。如果無法在bat文件中寫入這樣的代碼,請通知我不要再浪費我的時間了。感謝... – Afrand

回答

1
@echo off 
setlocal EnableDelayedExpansion 

SET InFile=Test2.txt 
SET OutFile=Output.txt 

set "i=" 
(for /F "delims=" %%a in (%InFile%) do (
    if defined i (
     set /A i+=1, odd=i%%2 
     if !odd! equ 1 set "line=!line! %%a" 
     if !i! equ 18 (
     echo !line:~1! 
     set "i=" 
    ) 
    ) else if "%%a" equ "WordA" (
     set i=0 
     set "line=" 
    ) 
)) > %OutFile% 
+0

哇。這就對了。謝謝。 – Afrand

+0

哇,那就是技能! – Sunsetquest

相關問題