免费注册 查看新帖 |

Chinaunix

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

如何进行匹配删除? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-29 11:00 |只看该作者 |倒序浏览
我要在两个文件中进行查找匹配,
如文件一:     文件二:
EP17001          EP17001                     
EP24014          EP24015
EP24016          EP23014
EP7001            EP7002

达到以下功能:
如文件一中的每一个条目与文件二相同(如EP17001)则剔除;
如文件一中的一个条目与文件二不同(如EP24016)则输出结果;
自己编了一个程序,不能得到结果:


  1. $file1 = "ui.txt";
  2. $file2 = "epd70.txt";
  3. $file3 = "result.txt";

  4. (unlink $file3) if (-e $file3);
  5. open (OUTPUT,">;>;$file3");
  6. open (INPUT1, $file1) or die "Can't open $file1";
  7. open (INPUT2, $file2) or die "Can't open $file2";
  8. while ($line1 = <INPUT1>;){
  9.    while ($line2 = <INPUT2>;) {
  10.       if ($line1 ne $line2){
  11.         print OUTPUT "$file1\n";
  12.      }
  13.    }
  14. }   
  15. close (INPUT1);
  16. close (INPUT2);
  17. close OUTPUT;
复制代码

论坛徽章:
0
2 [报告]
发表于 2003-05-29 11:38 |只看该作者

如何进行匹配删除?

$file1 = "ui.txt";
$file2 = "epd70.txt";
$file3 = "result.txt";

(unlink $file3) if (-e $file3);
open (OUTPUT,">;>;$file3";
open (INPUT1, $file1) or die "Can't open $file1";
open (INPUT2, $file2) or die "Can't open $file2";
while ($line1 = <INPUT1>{
   while ($line2 = <INPUT2> {
      if ($line1 ne $line2){
        print OUTPUT "$file1\n"; 改为 print OUTPUT "$file1"."\n";
     }
   }
}   
close (INPUT1);
close (INPUT2);
close OUTPUT;

论坛徽章:
0
3 [报告]
发表于 2003-05-29 11:42 |只看该作者

如何进行匹配删除?

file1:
EP17001
EP24014
EP24016
EP7001
file2:
EP17001
EP24015
EP23014
EP7002

$ comm -23 file1 file2

EP24014
EP24016
EP7001

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-05-29 11:45 |只看该作者

如何进行匹配删除?

#!/usr/bin/perl
open(F1,"./txt1.txt";
open(F2,"./txt2.txt";
open(F3,">;./txt3.txt";
@a = <F2>;;
close(F2);
while (<F1>{
   if (/^EP(\d+)/){
      $EP1=$1;
      unless( grep(/^EP$EP1\b/,@a)){
         print  F3 "EP$EP1\n";
      }
   }
}

论坛徽章:
0
5 [报告]
发表于 2003-05-29 11:47 |只看该作者

如何进行匹配删除?

paste file1 file2 | awk '{if($1 != $2)print $1}'

论坛徽章:
0
6 [报告]
发表于 2003-05-29 12:53 |只看该作者

如何进行匹配删除?

我在window下运行脚本的
这些都没有成功

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-05-29 13:20 |只看该作者

如何进行匹配删除?

#!/usr/bin/perl
open(F1,"./txt1.txt";
open(F2,"./txt2.txt";
open(F3,">;./txt3.txt";
@a = <F2>;;
close(F2);
@b=<F1>;;
close(F1);

for $b1 (@b){
$b1=~s/[\r\n\s]//g;
for $a1 (@a){
   $a1 =~s/[\r\n\s]//g;
   if($a1 eq $b1){
       $flag =0;
       last;
   }else{
       $flag =1;
   }
}
  if($flag ==1){
     print F3 "$b1\n";
  }
}

论坛徽章:
0
8 [报告]
发表于 2003-06-02 16:31 |只看该作者

如何进行匹配删除?

$file1 = "ui.txt";
$file2 = "epd70.txt";
$file3 = "result.txt";

(unlink $file3) if (-e $file3);
open (OUTPUT,">;>;$file3";
open (INPUT1, $file1) or die "Can't open $file1";
open (INPUT2, $file2) or die "Can't open $file2";
while ($line1 = <INPUT1>{
   while ($line2 = <INPUT2> {
      if ($line1 ne $line2){
        print OUTPUT "$file1]\n";
        #蓝色部分改为$line1     
      }
   }
}   
close (INPUT1);
close (INPUT2);
close OUTPUT;

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-06-02 20:05 |只看该作者

如何进行匹配删除?

[quote="anonimousboy"]\n";
        #蓝色部分改为$line1     
      }
   }
}   
close (INPUT1);
close (INPUT2);
close OUTPUT;[/quote]     

^^^^^^^^^^^^^^^^^^^^^^^^^
無意冒犯..不過你的code會print出很多$line1...
你可以依照你的code實際做一次..就知道為什麼了..

论坛徽章:
0
10 [报告]
发表于 2003-06-03 13:04 |只看该作者

如何进行匹配删除?

apile 说的对,我用apile 的最后一个程序成功了!
非常感激
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP