Board logo

标题: [文本处理] 如何删除文本里指定行的上下文内容(首尾多行内容)/提取两个指定行之间的多行内容 [打印本页]

作者: 最爱214    时间: 2017-4-9 15:58     标题: 如何删除文本里指定行的上下文内容(首尾多行内容)/提取两个指定行之间的多行内容

本帖最后由 pcl_test 于 2017-4-9 20:03 编辑

我有若干个以tem1、tem2、tem3顺序命名的txt文件,每个文件的格式均为     

                        
00000000  VERSION=WINDOWS x64   14:39:34  APR 09, 2017 CP=      1.250
project--Static Structural (C4)                                               
  ***** POST1 NODAL BODY LOAD TEMPERATURE LISTING *****                        
  LOAD STEP=     1  SUBSTEP=     1                                             
   TIME=    1.0000      LOAD CASE=   0                                         
    NODE    TEMP
       1   228.18   
       2   228.18   
       3   228.20   
       4   228.22   
       5   228.25   
       6   228.30   
       7   228.34   
       8   228.40   
       9   228.47   
      10   228.56   
MINIMUM VALUES
NODE        893
VALUE    227.97   
MAXIMUM VALUES
NODE         66
VALUE    261.64   


其中我只需要中间10行的数据,所以我想要批量删除前6行和后6行数据,请问如何实现呢?
作者: 最爱214    时间: 2017-4-9 18:07

我现在找到办法删除前n行的数据了
  1. @ECHO OFF
  2. ::设置要操作的文件夹路径如"d:\"及删除的前N行如6
  3. SET TxtDir=%cd%
  4. SET /A N=6
  5. ECHO 开始操作,请稍后...
  6. CD /D %TxtDir%
  7. FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B *.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
  8. ECHO 操作结束
  9. PAUSE
复制代码
不知道可不可以修改一下,再删除后n行的数据
作者: codegay    时间: 2017-4-9 19:02

正则表达式
^\s+\d+\s+\d+\.\d+
作者: 最爱214    时间: 2017-4-9 19:26

谢谢各位了,我自己用比较省事儿的方法的把问题解决了,通过依次删除关键词所在行、删除空行、删除前几行把要的数据提取出来了,代码如下。
  1. @echo off
  2. ::删除文本中含关键字的行
  3. for %%1 in (*.txt)do (findstr /iv  "NODE VALUE" "%%1">#
  4. move "#" "%%1">nul 2>nul)
  5. ::处理文本空行
  6. for %%a in (*.txt) do (
  7. for /f "tokens=*" %%b in ('type "%%a"') do echo %%b>>"1%%a"
  8. del "%%a"
  9. ren "1%%a" "%%a")
  10. ::删除的前N行如10
  11. SET TxtDir=%cd%
  12. SET /A N=10
  13. ECHO 开始操作,请稍后...
  14. CD /D %TxtDir%
  15. FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B *.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
  16. ECHO 操作结束
  17. PAUSE
复制代码

作者: pcl_test    时间: 2017-4-9 20:37

假设格式固定
1、
  1. findstr /rc:"^[ ]*[0-9][0-9]*[ ][ ]*[0-9][0-9\.]*[ ]*$" "文本.txt"
复制代码
2、
  1. @echo off
  2. call :read "文本.txt"
  3. pause&exit
  4. :read
  5. setlocal enabledelayedexpansion
  6. for /f "skip=6 tokens=1* delims=:" %%a in ('findstr /n .* "%~1"') do (
  7. set /a n+=1
  8. echo;%%b
  9. if !n! equ 10 goto :eof
  10. )
复制代码

作者: pcl_test    时间: 2017-4-9 21:14

  1. powershell "gc '文本.txt'|?{$_ -match '^\s*?\d+\s+\d+(\.\d+)?\s*$'}"
复制代码
  1. powershell "(gc '文本.txt')[6..15]"
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2