[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何提取文本中指定内容的上一行数据?

本帖最后由 Rasm 于 2017-3-26 11:24 编辑

原始数据:
  1. 0008wf|feifei
  2. 002king|3270501
  3. 007sh|youhua007
  4. 00boy00|3984472
  5. 0410zxasqw|lsk521
  6. 100014|123456789a
  7. 1000y|781126
  8. 1024yy|123456789
  9. 107559797|7758521
  10. 108799|357111
  11. 110321775|789789
复制代码
想提取以下文本内容的上一行数据到新文本:
  1. 002king|3270501
  2. 0410zxasqw|lsk521
  3. 107559797|7758521
复制代码
文件地址:https://share.weiyun.com/481a010f58993295b20d273c263e2ee3

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (a.txt) do (
  4. if not defined line ( set line=%%a) else (
  5. if "%%a"=="002king|3270501" echo;!line!
  6. if "%%a"=="0410zxasqw|lsk521" echo;!line!
  7. if "%%a"=="107559797|7758521" echo;!line!
  8. set line=%%a
  9. )
  10. )
  11. pause
复制代码

TOP

回复 2# taofan712


    数据比较多,怎么导出到新的文本啊?

TOP

#!/usr/bin/perl
use strict;

my @dst = qw(      
    002king|3270501   
    0410zxasqw|lsk521
    107559797|7758521
  );

my $line ;
my $prev = '';

while($line = <>)
{
   chomp  $line  and s/^\s+// and  s/\s+$// ;
   print "$prev\n" if ( grep ({$_ eq $line}   @dst ));
   $prev = $line;
}

TOP

回复 3# Rasm


(for ...
    ...
))>b.txt
1

评分人数

    • Rasm: 多谢帮忙技术 + 1

TOP

回复 5# ShowCode


    我要给你yes

TOP

回复 2# taofan712


    400行数据,输出内容为空

TOP

回复 7# Rasm


    文件压缩一下传上来我试试

TOP

回复 7# Rasm
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (a.txt) do (
  3. if not defined line ( set line=%%a) else (
  4. for /f "delims=" %%b in (b.txt) do if "%%a"=="%%b" echo;!line!
  5. set line=%%a
  6. )
  7. ))>c.txt
  8. pause
复制代码
如果指定对比的行比较多,可以放进b.txt

TOP

返回列表