簡體   English   中英

找到確切的行並將其復制-Windows批處理文件

[英]find the exact line and copy it - windows batch file

我的輸入文件是

abcd 145
abcd 148
abcd 153
abcd 523
abcd 563

我想編寫一個批處理文件以在輸入文本文件中找到第n行和此后的每k行(即第n行,然后第n+kn+2k等)並將其復制到另一個txt文件中

:PRINTFILE
SETLOCAL ENABLEDELAYEDEXPANSION
SET X=0
FOR /F "skip=%2 tokens=*" %%I IN (%1) DO (
        SET /A X=1-!X!
        IF "!X!"=="1" ECHO %%I
        )
ENDLOCAL
EXIT /B 0

您必須將代碼調用為

CALL :PRINTFILE INPUT.TXT 1 > OUTPUT.TXT

輸出將從第1行開始(在上述情況下),並從INPUT.TXT發出第3、5 ...等行,並將輸出存儲到OUTPUT.TXT

@ECHO OFF
SETLOCAL
(
 SET "printme=Y"
 FOR /f "delims=" %%a IN (q21027851.txt) DO (
  IF DEFINED printme (ECHO %%a&SET "printme=") ELSE (SET printme=Y)

 )
)>newfile.txt

GOTO :EOF

輸入文件q21027851.txt輸出到newfile.txt

最初將printme設置為printme會打印偶數行。


給定修訂的規范(我將通過編輯將其包含在問題中)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
SET firstline=1
SET skipby=5
(
 SET /a skipme=firstline-1
 FOR /f "delims=" %%a IN (q21027851.txt) DO (
  IF !skipme!==0 SET /a skipme=%skipby%&ECHO %%a
  SET /a skipme-=1   
 )
)>newfile.txt

GOTO :EOF

使用一個好的文件解析工具,如awk

C:\>awk "NR%2!=0{print}" myFile.txt
abcd 145
abcd 153
abcd 563

你可以在這里這里下載awk

嘗試這個

:PRINTFILE
SETLOCAL ENABLEDELAYEDEXPANSION
SET X=0
FOR /F "skip=%2 tokens=*" %%I IN (%1) DO (
        SET /A R=!X!%%%3
        IF "!R!"=="0" ECHO.%%I
        SET /A X+=1
        )
ENDLOCAL
EXIT /B 0

使用以下代碼來調用此代碼

CALL :PRINTFILE INPUT.TXT 4 5 > OUTPUT.TXT

其中4是文件開頭要跳過的行數,而5是步驟,即它將打印第4行,第4 + 5行,第4 + 5 + 5行,依此類推。

注意:如果您的文本文件具有字符! 或^它需要轉義:(

(由於聲譽問題,無法將其添加為評論:-p)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM