标题: [文本处理] 批处理如何提取文本中指定内容的上一行数据? [打印本页]
作者: Rasm 时间: 2017-3-25 11:05 标题: 批处理如何提取文本中指定内容的上一行数据?
本帖最后由 Rasm 于 2017-3-26 11:24 编辑
原始数据:- 0008wf|feifei
- 002king|3270501
- 007sh|youhua007
- 00boy00|3984472
- 0410zxasqw|lsk521
- 100014|123456789a
- 1000y|781126
- 1024yy|123456789
- 107559797|7758521
- 108799|357111
- 110321775|789789
复制代码
想提取以下文本内容的上一行数据到新文本:- 002king|3270501
- 0410zxasqw|lsk521
- 107559797|7758521
复制代码
文件地址:https://share.weiyun.com/481a010f58993295b20d273c263e2ee3
作者: taofan712 时间: 2017-3-25 11:41
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- if not defined line ( set line=%%a) else (
- if "%%a"=="002king|3270501" echo;!line!
- if "%%a"=="0410zxasqw|lsk521" echo;!line!
- if "%%a"=="107559797|7758521" echo;!line!
- set line=%%a
- )
- )
- pause
复制代码
作者: Rasm 时间: 2017-3-25 12:34
回复 2# taofan712
数据比较多,怎么导出到新的文本啊?
作者: zuodx 时间: 2017-3-25 12:49
#!/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;
}
作者: ShowCode 时间: 2017-3-25 13:14
回复 3# Rasm
(for ...
...
))>b.txt
作者: Rasm 时间: 2017-3-25 13:15
回复 5# ShowCode
我要给你yes
作者: Rasm 时间: 2017-3-25 13:20
回复 2# taofan712
400行数据,输出内容为空
作者: ShowCode 时间: 2017-3-25 13:26
回复 7# Rasm
文件压缩一下传上来我试试
作者: taofan712 时间: 2017-3-25 16:30
回复 7# Rasm - @echo off & setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (a.txt) do (
- if not defined line ( set line=%%a) else (
- for /f "delims=" %%b in (b.txt) do if "%%a"=="%%b" echo;!line!
- set line=%%a
- )
- ))>c.txt
- pause
复制代码
如果指定对比的行比较多,可以放进b.txt
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |