在多个文件中进行查找匹配的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
frogfrogfrog
帖子: 19
注册时间: 2008-07-13 23:19
送出感谢: 0
接收感谢: 0

在多个文件中进行查找匹配的问题

#1

帖子 frogfrogfrog » 2008-12-31 16:49

文件A中为:

代码: 全选

bob 1234
frank 56798
yui 345678
也就是‘名字+空格+电话’的组合

文件B中为:

代码: 全选

1234
MATH
56798
ENGLISH
345678
FRENCH
也就是‘电话’换行‘科目’的组合,其中‘电话’和文件A中的顺序不是对应的;还可以有电话后面没有科目的情况,也就是

代码: 全选

电话1
电话2
科目
现要合成一文件得到名字 + 空格 + 电话 + 科目的组合,我的想法是在B中取到电话,然后在电话接下来的一行中取到科目,然后在A中查找 电话与B中的对应,再把科目加在后面。但是不知道怎么换行,也就是查找到电话之后就查找接下来的一行中的科目,如果没有就是空。

请教论坛高手或者给个实例。谢谢。
头像
HuntXu
论坛版主
帖子: 5776
注册时间: 2007-09-29 3:09
送出感谢: 0
接收感谢: 6 次

Re: 在多个文件中进行查找匹配的问题

#2

帖子 HuntXu » 2008-12-31 21:39

初学perl,抛砖引玉了...
太特殊的情况就没考虑...

代码: 全选

#!/usr/bin/perl -w
use strict;

my $num;
my %numname;
open (FILE1, $ARGV[0]);
while (<FILE1>) {
    chomp;
    /(\w+)\s(\d+)/;
    $numname{$2} = $1;
}
open (FILE2, $ARGV[1]);
while (<FILE2>) {
    chomp;
    if (/\d+/) {
    $num = $_;
    }
    elsif (exists $numname{$num}) {
	print $numname{$num}." ".$num." ".$_."\n";
    }
}
附件
2008-12-31-214604_724x548_scrot.png
HUNT Unfortunately No Talent...
ztf
帖子: 44
注册时间: 2007-04-29 13:15
送出感谢: 0
接收感谢: 0
联系:

Re: 在多个文件中进行查找匹配的问题

#3

帖子 ztf » 2009-01-01 13:07

用paste 命令即可
回复

回到 “Shell脚本”