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

Chinaunix

標(biāo)題: 抓取文件名 [打印本頁]

作者: tingshuibanxia    時(shí)間: 2016-08-23 09:50
標(biāo)題: 抓取文件名
本帖最后由 tingshuibanxia 于 2016-08-23 13:18 編輯

大家好!

在目錄:/home/perl/  下有一系列文件:X4.scv
                                                    X1.scv
                                                     X22.scv
                                                     test
                                                     1.pl


想要抓取*.scv文件的前綴,用于后續(xù)分析,
寫了一個(gè)腳本,請(qǐng)大神幫忙看看:



  1. #!/usr/bin/perl -w
  2. use strict;

  3. my @files = glob("/home/perl/*.scv");
  4. foreach my $file(sort @files){
  5.         my $ID =$file=~m/\w+\/;
  6.         print $ID;
  7. }


復(fù)制代碼


輸出: X1  X4 X22

作者: stanley_tam    時(shí)間: 2016-08-23 11:09
試試?
  1. #!/usr/bin/perl -w
  2. use strict;

  3. my @files = glob("/home/perl/*.scv");
  4. foreach my $file(sort @files){
  5.         my ($ID) = $file =~ m{/home/perl/([^.]+)\.};
  6.         print "$ID$/";
  7. }
復(fù)制代碼

作者: tingshuibanxia    時(shí)間: 2016-08-23 13:17
似乎有點(diǎn)問題,不知道這種從變量中來匹配的正則表達(dá)怎么寫啊啊啊啊
作者: sunzhiguolu    時(shí)間: 2016-08-23 14:33
試下 File::Basename 模塊中的 basename 方法:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Basename;

  5. foreach (glob ('./*.scv')){
  6.     my $basename = basename ($_, '.scv');
  7.     print "$basename\n";
  8. }
復(fù)制代碼

作者: sunzhiguolu    時(shí)間: 2016-08-23 15:29
my ($ID) = $1 if ($file =~ m/(\w+)\./);    # $file => X4.scv
(\w+) => X4
\.        => .
作者: stanley_tam    時(shí)間: 2016-08-23 17:04
額,那就用命令吧
  1. ls /home/perl/*.scv | cut -f4 -d / | cut -f 1 -d .
復(fù)制代碼

回復(fù) 3# tingshuibanxia



作者: 104359176    時(shí)間: 2016-08-23 21:05
看到目錄, 我就想到用 File::Find::Wanted qw(find_wanted); 這個(gè)模塊提供的方法能夠找出子目錄中所有的文件, 自動(dòng)過濾目錄. 取文件名用 File::Basename;
這樣這個(gè)代碼即使處理別的文件夾, 或者嵌套包含文件夾的文件夾, 都能重用了.

  1. use 5.020;
  2. use File::Basename qw(basename);
  3. use File::Find::Wanted qw(find_wanted);

  4. my @files = find_wanted(sub { /\.csv$/}, ".");
  5. for (@files) {
  6.     say basename($_);
  7. }
  8. # my @sufix_name = map { basename} @files;
復(fù)制代碼

作者: 華小飛_Perl    時(shí)間: 2016-08-23 21:23
回復(fù) 7# 104359176
大神說的太棒啦!



作者: 104359176    時(shí)間: 2016-08-24 19:09
寫了太多無用的代碼, 只希望能寫點(diǎn)以后可能用到的代碼.
作者: RE_HASH    時(shí)間: 2016-08-25 02:56
該道隔壁去問shell問題:
$>  echo $(for i in *scv ; do echo ${i%*.scv}; done)
X1 X22 X4


作者: kingfighters    時(shí)間: 2016-08-25 23:03
頂七樓。。
作者: kingfighters    時(shí)間: 2016-08-25 23:06
The cynical may say "that's just the same as doing this":

        my @files;
        find( sub { push @files, $File::Find::name if -f && /\.jpg$/ }, $dir );

    Sure it is, but File::Find::Wanted makes it more obvious, and saves a line
    of code. That's worth it to me. I'd like it if find_wanted() made its way
    into the File::Find distro, but for now, this will do.


說的不錯(cuò),F(xiàn)ile::Find確實(shí)太繁瑣了




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