Chinaunix

标题: 如何进行匹配删除? [打印本页]

作者: flora    时间: 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;
复制代码

作者: 流浪者    时间: 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;
作者: deathcult    时间: 2003-05-29 11:42
标题: 如何进行匹配删除?
file1:
EP17001
EP24014
EP24016
EP7001
file2:
EP17001
EP24015
EP23014
EP7002

$ comm -23 file1 file2

EP24014
EP24016
EP7001
作者: apile    时间: 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";
      }
   }
}
作者: deathcult    时间: 2003-05-29 11:47
标题: 如何进行匹配删除?
paste file1 file2 | awk '{if($1 != $2)print $1}'
作者: flora    时间: 2003-05-29 12:53
标题: 如何进行匹配删除?
我在window下运行脚本的
这些都没有成功
作者: apile    时间: 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";
  }
}
作者: anonimousboy    时间: 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;
作者: apile    时间: 2003-06-02 20:05
标题: 如何进行匹配删除?
[quote="anonimousboy"]\n";
        #蓝色部分改为$line1     
      }
   }
}   
close (INPUT1);
close (INPUT2);
close OUTPUT;[/quote]     

^^^^^^^^^^^^^^^^^^^^^^^^^
無意冒犯..不過你的code會print出很多$line1...
你可以依照你的code實際做一次..就知道為什麼了..
作者: flora    时间: 2003-06-03 13:04
标题: 如何进行匹配删除?
apile 说的对,我用apile 的最后一个程序成功了!
非常感激




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2