2014-12-18 70 views
0

我有一个文本文件A00010.txt A00011.txt A00012.txt中包含了像不同的条目MyFolder文件到A00099.txt文本文件,grep的字用perl

umxwtdn8vtnt_n 
umxwtdtnt_nn8v 
umxwt_ntdn8vtn 
u8vtnt_nmxwtdn 
utnt_nmxwtdn8v 

我的Perl代码是

#!/usr/bin/perl 
use strict; 

     my $count = 10; 
     for ($count = 10; $count<= 99; $count++) { 
      my $result = `/bin/cat /myfolder/A000$count.txt | grep "umxwtdn8vtnt_n"`; 
      return $result; 
     } 

    print $result; 

我试图获得$结果值,但显示为空

+0

你是什么意思,你试图获得$结果值?你想要所有的匹配线? – sebnukem 2014-12-18 23:33:23

+0

不,我只需要一个值 – Devaki 2014-12-18 23:35:03

+0

然后我可以告诉你答案:你正在寻找的值是'umxwtdn8vtnt_n'。这是没有道理的。 – sebnukem 2014-12-18 23:37:39

回答

2

您是否真的需要使用Perl?

如果不是:

find /myfolder -name "A000??.txt" | xargs grep -n "umxwtdn8vtnt_n" 

会发现在你的文件的模式,并在该行告诉你...

你想知道,如果图案中的一个或多个档案?然后:

my $not_found = 1; 
for (my $count = 10; $count<= 99; $count++) { 
    my $result = `grep "umxwtdn8vtnt_n" /myfolder/A000$count.txt`; 
    if ($result) { 
     print $result; 
     $not_found = 0; # error level 0 = no error = found 
     last; 
    } 
} 
exit $not_found; # error level 1 = error = not found 

仍在试图了解你的需要...怎么样:

my $result; 
for (my $count = 10; $count<= 99; $count++) { 
    # you should test that A000$count.txt actually exists here 
    my $match = `grep "umxwtdn8vtnt_n" /myfolder/A000$count.txt`; 
    if ($match == "umxwtdn8vtnt_n") { 
     print "found $match in A000${count}.txt"; 
     $result = $match; 
     last; # exit for loop 
    } 
} 
if ($result) { 
    # do something with it? 
} 
+0

如何使用$结果以外的(我的$ count = 10; $ count <= 99; $ count ++){// code} – Devaki 2014-12-18 23:49:27

+0

你是什么意思?这是一个变量... – sebnukem 2014-12-18 23:50:25

+0

我的意思是 外面环路我的一个功能,我需要在这个函数 – Devaki 2014-12-18 23:52:13

3

/myfolder真正的根目录? (你在ls /中看到了什么?你看到myfolder?)在Unix系统的根目录中添加东西是非常罕见的,我认为你不会搞乱/

而且,你是一个子程序(sub { })外返回$result,如果是那样的话,你应该得到一个Perl运行时错误。

如果您要复制的代码片段,那么请注意$result是一个局部变量和一个子程序结束后消失。