亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 文件之間的替換 [打印本頁(yè)]

作者: xingzhou823    時(shí)間: 2011-05-11 14:44
標(biāo)題: 文件之間的替換
1.txt是名稱文件
2.txt是“名稱 + 內(nèi)容”文件

想把2.txt中所有的包含1.txt名稱的行都找出來。
  1. #!/usr/bin/perl -w
  2. use strict;

  3. my $a="2.txt";
  4. my $b="1.txt";
  5. open IN1, $a or die "can't open $a";
  6. open IN2, $b or die "can't open $b";
  7. open OUT, '>>', "out.txt" or die "can't open out.txt";

  8. my @data = <IN1>;
  9. my @names = <IN2>;
  10. foreach my $i (0..$#data){
  11.                  my @line2 = split(/\s+/,$data[$i]);
  12.                  my $name1 = shift @names;
  13.                  my $name2 = shift @line2;
  14.                  if ($name1 eq $name2){
  15.                 print OUT $data[$i];
  16.               }
  17.             }
  18. close IN1;
  19. close IN2;
  20. close OUT;
復(fù)制代碼
哪里不對(duì)啦
作者: Cu_fans    時(shí)間: 2011-05-11 14:46
舉幾個(gè)例子吧。。

文件內(nèi)容
期待結(jié)果啥的
作者: xingzhou823    時(shí)間: 2011-05-11 14:53
回復(fù) 2# Cu_fans


    例如,
1.txt中
song
zhang
wang
...


2.txt中
guan 135 658 687
song 214 354 547
zhang 264 364 784
xie 123 541 589
wang 201 265 847
han 021 521 854
...

得到 out.txt
song 214 354 547
zhang 264 364 784
wang 201 265 847
...
作者: Cu_fans    時(shí)間: 2011-05-11 15:00
grep -f 1.txt 2.txt 就出來了
作者: xingzhou823    時(shí)間: 2011-05-11 15:05
本帖最后由 xingzhou823 于 2011-05-11 15:14 編輯

回復(fù) 4# Cu_fans


    can't open perl script grep:No such file or directory .
是什么意思?

grep 函數(shù)我不會(huì)用
作者: yinyuemi    時(shí)間: 2011-05-11 15:41
回復(fù) 1# xingzhou823
  1. perl -lane 'if($#F==0){$a{$F[0]}=1}if($#F>0&&$a{$F[0]}){print $_}' 1.txt 2.txt
  2. song 214 354 547
  3. zhang 264 364 784
  4. wang 201 265 847
復(fù)制代碼

作者: xingzhou823    時(shí)間: 2011-05-11 15:51
回復(fù) 6# yinyuemi


    太復(fù)雜了,
可是我試了一下

can't find string terminator "'" anywhere befor EOF at -e line 1.

什么意思?
作者: Cu_fans    時(shí)間: 2011-05-11 16:11
回復(fù)  Cu_fans


    can't open perl script grep:No such file or directory .
是什么意思?

gr ...
xingzhou823 發(fā)表于 2011-05-11 15:05



shell下的grep 命令
作者: Cu_fans    時(shí)間: 2011-05-11 16:12
你的源程序存在點(diǎn)邏輯問題。。 在你的基礎(chǔ)上稍微修改了下,應(yīng)該能滿足
  1. #!/usr/bin/perl -w
  2. use strict;

  3. my $a="2.txt";
  4. my $b="1.txt";
  5. open IN1, $a or die "can't open $a";
  6. open IN2, $b or die "can't open $b";
  7. open OUT, '>', "out.txt" or die "can't open out.txt";

  8. my @data = <IN1>;

  9. sub func
  10. {
  11.         my ($str, @arr) = @_;
  12.         for (my $i=0; $i<=$#arr; ++$i)
  13.         {
  14.                 chomp($arr[$i]);
  15.                 if ($str eq $arr[$i])
  16.                 {
  17.                         return 1;
  18.                 }
  19.         }
  20.        
  21.         return 0;
  22. }

  23. my @names = <IN2>;
  24. foreach my $i (0..$#data){
  25.                  my @line2 = split(/\s+/,$data[$i]);
  26.                  my $name2 = shift @line2;
  27.                  print "name2:", $name2,"\n";
  28.                  if (func($name2, @names))
  29.                  {
  30.                         print OUT $data[$i];
  31.                        }
  32.             }       
  33. close IN1;
  34. close IN2;
  35. close OUT;
復(fù)制代碼

作者: xingzhou823    時(shí)間: 2011-05-11 16:14
回復(fù) 8# Cu_fans


    我不懂這個(gè)。
麻煩你還是給我修改一下我那個(gè)吧,先讓我過了這關(guān),卡在這好難受啊




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2