Board logo

标题: [文本处理] [已解决]批处理怎样获取指定字符串所在行之后的文本? [打印本页]

作者: jzsgyml    时间: 2011-4-12 19:19     标题: [已解决]批处理怎样获取指定字符串所在行之后的文本?

下午发个帖子意思有偏差,现在重新请教各位朋友了。
两个日志文件,一个源文件source.txt,一个源文件处理得到的成功文件Success.txt ,成功文件不一定是源文件前面的全部,因为有失败的,现在打算获取成功文件最后一行的字符串,然后去源文件查找并且删除之前的内容,或者换个方式,查找源文件该字符串所在行,然后获取该行数之后的内容保存。

举例:源文件source.txt
  1. a0001
  2. a0002
  3. a0003
  4. a0004
  5. a0005
  6. a0006
  7. a0007
  8. a0008
  9. a0009
  10. a0010
复制代码
成功文件Success.txt
  1. a0003
  2. a0004
  3. a0005
复制代码
然后我找到个获取成功文件最后一行的代码
  1. for /f "delims=" %%i in (Success.txt) do (set a=%%i)
  2. echo %a%>>3.txt
复制代码
这个可以得到成功文件的最后一行 a0005的数据,请问怎么根据这个数据删除源文件该数据之前的所有数据,并且覆盖保存?
得到如下结果
  1. a0006
  2. a0007
  3. a0008
  4. a0009
  5. a0010
复制代码

作者: hanyeguxing    时间: 2011-4-12 19:32

本帖最后由 hanyeguxing 于 2011-4-12 19:50 编辑
  1. @echo off
  2. set a=Success.txt
  3. set b=source.txt
  4. for /f "usebackq delims=" %%a in ("%a%") do set "n=%%a"
  5. for /f "delims=:" %%a in ('findstr /ni /c:"%n%" "%b%"') do set n=%%a
  6. more +%n% "%b%">temp
  7. move temp "%b%"
复制代码
代码未测试:从%a%文件获取最后一行内容并以此内容查询%b%文件中的行号,再以此行号跳过然后覆盖输出
ps:源文件中的最后一行a0010怎么到最后还没了?
作者: batman    时间: 2011-4-12 19:43

成功和不成功是这么有规律?成功就连续成功,一不成功就都不成功了?
作者: jzsgyml    时间: 2011-4-12 20:05

谢谢二楼版主帮助,这次运行没有问题,通过成功文件最后一行的字符串查找,就可以删除前面不管成功,还是失败的,具有通用性,现在测试没有问题了!
另外那个结果文件a0010,是我复制错了,应该是有的!我现在在主帖改过来,防止误导后来需要的朋友!

回复三楼,成功失败是随机的,失败的处理行就不会保存在成功文件,所以成功文件是内容是源文件的随机子集。
作者: Batcher    时间: 2011-4-12 21:01

1# jzsgyml
  1. @echo off
  2. for /f "delims=" %%i in (Success.txt) do (
  3.     set a=%%i
  4. )
  5. sed -i "0,/%a%/d" source.txt
复制代码

作者: hanyeguxing    时间: 2011-4-13 07:32

  1. @echo off
  2. set a=Success.txt
  3. set b=source.txt
  4. for /f "usebackq delims=" %%a in ("%a%") do set "n=%%a"
  5. if defined n for /f "delims=:" %%a in ('findstr /ni /c:"%n%" "%b%"') do set m=%%a
  6. if defined m (
  7. more +%m% "%b%">temp
  8. move temp "%b%"
  9. )
复制代码

作者: jzsgyml    时间: 2011-4-13 13:24

谢谢斑竹大人!最好的批处理论坛,我们永远支持!




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