找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29343|回复: 8

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

[复制链接]
发表于 2017-3-25 11:05:58 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2017-3-25 11:41:44 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2017-3-25 12:34:21 | 显示全部楼层
回复 2# taofan712


    数据比较多,怎么导出到新的文本啊?
发表于 2017-3-25 12:49:51 | 显示全部楼层
#!/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;
}
发表于 2017-3-25 13:14:18 | 显示全部楼层
回复 3# Rasm


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

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 多谢帮忙

查看全部评分

 楼主| 发表于 2017-3-25 13:15:51 | 显示全部楼层
回复 5# ShowCode


    我要给你yes
 楼主| 发表于 2017-3-25 13:20:40 | 显示全部楼层
回复 2# taofan712


    400行数据,输出内容为空
发表于 2017-3-25 13:26:38 | 显示全部楼层
回复 7# Rasm


    文件压缩一下传上来我试试
发表于 2017-3-25 16:30:24 | 显示全部楼层
回复 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:50 , Processed in 0.015181 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表