繁体   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