0

日付のラベルが付けられたサブディレクトリに保存されているデータがたくさんあります。Cwd コマンドを使用して現在の作業ディレクトリを取得し、サブディレクトリから回復したデータを書き込んでいる vi ファイルに出力できるようにしました。データ文字列のプレフィックスとして Cwd を使用しています。パスではなく、現在のディレクトリ名のみを出力する方法はありますか?

例:

印刷する代わりに-

 /d2/aschwa/archive_data/METAR_data/20120302KDUX 121255Z.........

印刷のみの方法はありますか?

 20120302KDUX 121255Z.........

これが私が使用しているコードです-

use strict;
use warnings;
use file::find;
use Cwd;

my @folder = ("/d2/aschwa/archive_project/METAR_data/");

open( OUT , '>', 'KDUX_METARS.txt') or die "Could not open $!";

print OUT "Station, Day/Time, Obs Type, Wind/Gust, Vis, Sky, T/Td, Alt, Rmk\n";
print STDOUT "Finding METAR files\n";

my $criteria = sub {if(-e && /^2012/) {
                    open(my $file,$_) or die "Could not open $_ $!\n";
                      my $dir = getcwd;
                        while(<$file>) {
                          print OUT $dir,$_ if /KDUX ....55Z|KDUX ....05Z/;
                            }
                         }
                      };
find($criteria, @folder);
close OUT;
4

4 に答える 4

5

Perl では、関数を使用しbasenameたりfileparse、パスからファイル名を抽出したりできます。

それらはコアモジュールFile::Basenameに含まれています。

于 2013-10-28T23:22:47.677 に答える
0

Perl モジュール File::Basename を Cwd と組み合わせて、パスなしでディレクトリを取得できます

perl -MCwd -MFile::Basename -e 'my $dir = cwd; print basename($dir)'
于 2013-10-28T23:27:58.987 に答える
0

以下のような正規表現を使用して、最後のスラッシュの後にコンテンツを取得してみませんか。

 $path = '/d2/aschwa/archive_data/METAR_data/20120302KDUX 121255Z.........';
 $path = $1 if $path =~ m~/([^/]*)/?$~;

私の意見では、これが最善の方法です。上記のコードは単なる例ですが、そこにある正規表現はあなたが望む仕事をします。

于 2013-10-29T09:04:03.757 に答える
0

では、簡単splitpop

perlmonks から恥知らずに盗まれたもの:

$ perl -e 'print pop @{[split m|/|, "/home/bin/scripts/test.pl"]};'
test.pl

参照リンク: http://www.perlmonks.org/?node_id=241089

于 2013-10-28T23:21:30.100 に答える