免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1693 | 回复: 7
打印 上一主题 下一主题

文件处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-28 14:08 |只看该作者 |倒序浏览
我有两个文件(UNIX格式):
cat file1
AAA  001  1000.00
BBB  001  2000.00
DDD  002  4000.00
EEE  002  5000.00
FFF  003  6000.00

cat file2
01 1111  AAA  WW001  $$$$  1000.00
02 2222  BBB  GG001  %%%%  2000.00
03 3333  CCC  JJ001  ****  3000.00
04 4444  DDD  FF002  &&&&  4000.00
05 5555  EEE  RR002  @@@@  5000.00
06 666   FFF  UU003  JJJJ  6000.00
07 777   III  II005  PPPP  7000.00
08 8888  TTT  TT008  TTTT  8000.00

如何从file2中筛选出如下行形成file3

01 1111  AAA  WW001  $$$$  1000.00
02 2222  BBB  GG001  %%%%  2000.00
04 4444  DDD  FF002  &&&&  4000.00
05 5555  EEE  RR002  @@@@  5000.00
06 666   FFF  UU003  JJJJ  6000.00


规则:  file2 的第三列与 file1的第一列相同,并且 file2 的第四列的3-5字段 与 file1的第二列相同 ,file2 的第六列 与 file1的第三列相同
      
      

谢谢各位!!

论坛徽章:
0
2 [报告]
发表于 2005-06-29 13:59 |只看该作者

文件处理问题

hash

论坛徽章:
0
3 [报告]
发表于 2005-06-29 14:17 |只看该作者

文件处理问题

[quote]原帖由 "gunguymadman"]hash[/quote 发表:


????

论坛徽章:
0
4 [报告]
发表于 2005-08-16 16:46 |只看该作者

文件处理问题

#!/usr/bin/perl
# This Perl srcipt writen by forrest.w

$filename1="file1";
$filename2="file2";

open (FL1,$filename1) or die "cannot open for $! \n";
open (FL2,$filename2) or die "cannot open for $! \n";

@line1=<FL1>;;
@line2=<FL2>;;

@value1=();
@value2=();
@value3=();

$i=0;
foreach  (@line1) {
        $_=~/(\w+\s+)(\d+\s+)(\d+\.\d+)/;
        $j=0;
        $value1[$i][$j]=$1;
        $value1[$i][$j+1]=$2;
        $value1[$i][$j+2]=$3;
        $i++;
}

$a=0;
foreach  (@line2) {
        $_=~/(\d+\s+)(\d+\s+)(\w+\s+)(\w+\d+\s+)(\S+\s+|\w+\s+)(\d+\.\d+)/;
        $b=0;
        $value2[$a][$b]=$1;
        $value2[$a][$b+1]=$2;
        $value2[$a][$b+2]=$3;
        $value2[$a][$b+3]=$4;
        $value2[$a][$b+4]=$5;
        $value2[$a][$b+5]=$6;
        $a++;
}

print "a=$a \t i=$i \n";

for ($m=0;$m<=$a ;$m++) {
        for ($n=0;$n<=$i ;$n++) {
                if (($value2[$m][2]==$value1[$n][0]) && (substr ($value2[$m][3],2,4)==$value1[$n][1])&& ($value2[$m][5]==$value1[$n][2]) ) {
                        print "$value2[$m][0] $value2[$m][1] $value2[$m][2] $value2[$m][3] $value2[$m][4]  $value2[$m][5] \n" ;
                        # can write to your file.
                }
        }
}

close FL1;
close FL2;

论坛徽章:
0
5 [报告]
发表于 2005-08-16 16:47 |只看该作者

文件处理问题

写的有些罗嗦
但是可以达到你的要求,哈。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2005-08-16 16:52 |只看该作者

文件处理问题

原帖由 "forrest.w" 发表:
写的有些罗嗦
但是可以达到你的要求,哈。

几个月前的问题也回答?

论坛徽章:
0
7 [报告]
发表于 2005-08-16 17:36 |只看该作者

文件处理问题

呵呵
是呀

论坛徽章:
0
8 [报告]
发表于 2005-08-17 15:32 |只看该作者

文件处理问题

open H1, "file1";
open H2, "file2";
my %line;

$line{substr($_, 0, 1) - "A" + 1} = 1 foreach (<H1>;
while (<H2> {
  print $_ if $line{$.};
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP