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

Chinaunix

標(biāo)題: 如何使用 perl篩選出目錄中的文件并打開(kāi) [打印本頁(yè)]

作者: linuxnature    時(shí)間: 2013-07-10 21:49
標(biāo)題: 如何使用 perl篩選出目錄中的文件并打開(kāi)
比如目錄/opt/data下有abc_01_01.data, abc_01_02.data, abc_02_01.data, abc_02_03.data 這樣的文件,文件都是以abc_ 開(kāi)頭的, 第一個(gè)數(shù)字是文件的編號(hào),不同的編號(hào)的文件內(nèi)容格式不同,第二個(gè)數(shù)字是寫入的文件序號(hào),序號(hào)是不固定的,每一個(gè)編號(hào)對(duì)應(yīng)的最大的序號(hào)的文件才是要使用的, 也就是這里的abc_01_02.data,abc_02_03.data是有效的文件

那么請(qǐng)問(wèn)我如何才能定位到我想要的文件上,并且使用別的程序能夠打開(kāi)它. 這里比如說(shuō)是 linux下的cat吧

請(qǐng)幫忙寫出完整的,可執(zhí)行的perl程序,由于本人目前是perl的小白,還沒(méi)有能力通過(guò)一兩個(gè)提醒就能寫出來(lái). 所以麻煩大家了

注: 我只查到了使用find可以查找指定目錄的文件,但不能篩選出相應(yīng)的文件,也不能使用程序分別打開(kāi)這些文件.
這是我找到的代碼

use strict;
use File::Find;
my @path = '/opt/data';
sub wanted {
    if ( -f $File::Find::name ) {
        if ( $File::Find::name =~ /abc/ ) {         
            print "$File::Find::name\n";
        }
    }
}
find( \&wanted, @path );
作者: grshrd49    時(shí)間: 2013-07-10 22:46
你可以使用正則來(lái)篩選查找到的文件,例如你篩選出所有編號(hào)01的文件你可以這樣寫 /_01_/
如果你想打開(kāi)篩選出的文件 你可以使用open FF,"文件名"; 就行了
作者: linuxnature    時(shí)間: 2013-07-10 22:51
我是想篩選出  目錄下的所有的不同編號(hào)的文件,出現(xiàn)幾個(gè)編號(hào)要幾個(gè),而且這個(gè)是不固定的. 再有就是編號(hào)后面的序號(hào),只要最大的那個(gè)序號(hào)的文件

回復(fù) 2# grshrd49


   
作者: syncpk99    時(shí)間: 2013-07-11 08:08
perldoc -f glob
作者: grshrd49    時(shí)間: 2013-07-11 09:57
回復(fù) 3# linuxnature

這個(gè)假設(shè)你的文件已經(jīng)都在@files這個(gè)列表中;然后就可以輸出你需要的文件了
  1. use strict;

  2. my @files = ("abc_01_08.data","abc_01_4322.data","abc_02_444.data","abc_02_111.data");
  3. my %file_hash;
  4. for(@files){
  5.         if(/abc_(\d*)_(\d*).data/){
  6.                 $file_hash{$1}{$2}=$_;
  7.         }
  8. }
  9. my $max;
  10. my $need_file;
  11. for my $k1 (keys %file_hash){
  12.         print "$k1\n";
  13.         $max = (keys %{$file_hash{$k1}})[0];
  14.         $need_file = $file_hash{$k1}{$max};
  15.         print "debug-$max\n";
  16.         for my $k2 (keys %{$file_hash{$k1}}){
  17.                 if($max < $k2){
  18.                         $max = $k2;
  19.                         $need_file = $file_hash{$k1}{$k2};
  20.                 }
  21.                 print "  $k2\n    $file_hash{$k1}{$k2}\n";
  22.         }
  23.         print "need file -- $need_file\n";
  24. }
復(fù)制代碼

作者: linuxnature    時(shí)間: 2013-07-11 11:19
太感謝了, 我只需要把獲取的文件名賦給 $files就可以了 , 別的地方稍加修改應(yīng)該就能用了. 非常感謝大俠
回復(fù) 5# grshrd49


   




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