未排序的數據需要幫助的基礎上的日期戳在文件名排序perl的文件列表
5CM00225_10_16_2017_10_54_42.xml
5CM10538_10_16_2017_11_04_18.xml
1ZM06004_10_16_2017_11_04_14.xml
5XM10010_10_17_2017_08_00_47.xml
5ZM05391_10_15_2017_08_51_07.xml
5ZM05388_10_17_2017_08_01_06.xml
5ZM00058_10_17_2017_08_00_49.xml
NMC00166_10_15_2017_08_51_06.xml
5CM10538_10_15_2017_08_51_06.xml
預期結果
NMC00166_10_15_2017_08_51_06.xml
5CM10538_10_15_2017_08_51_06.xml
5ZM05391_10_15_2017_08_51_07.xml
5CM00225_10_16_2017_10_54_42.xml
1ZM06004_10_16_2017_11_04_14.xml
5CM10538_10_16_2017_11_04_18.xml
5XM10010_10_17_2017_08_00_47.xml
5ZM00058_10_17_2017_08_00_49.xml
5ZM05388_10_17_2017_08_01_06.xml
基本上我的Net :: SFTP得到一個目錄列表關閉遠程站點並與本地文件列表進行比較。我想按文件名按日期對列表進行排序,但由於字符串中還有其他信息需要忽略,因此遇到問題。
my $sftp = Net::SFTP->new($host, %args);
my @list = $sftp->ls($path);
open(my $fh, '>', $file); # open a log file to save remote directory listing
my @sorted = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, $_=~/(\d{2})_(\d{2})_(\d{4})_(\d{2})_(\d{2})_(\d{2})/] } # unsuccessful sorting attempt
@list;
foreach my $item (@sorted) {
$i = ${item}->{filename};
print $fh "$1\n"; # prints each record to the open log file
}
close $fh;
我已經做了在同一時間之前和大量的正則表達式,但從未排序,我很清楚地笨拙起來,因爲它沒有任何的排序,並沒有拋出任何錯誤。
我想過從每個字符串中提取DD_MM_YYYY_hh_mm_ss並試圖用它作爲參考,但沒有提供任何有用的進展,所以我刮掉了這個想法。
比我的解決方案要好得多! – Andrey
謝謝!簡單的解決方案,完全按要求工作。看到你做了什麼不同,突出了爲什麼我沒有意義,感謝你的幫助。 – frozenthorn