2012-03-09 47 views
2

有人可以幫我用perl一個班輪來獲得以下內容嗎?它必須在perl中。perl一行腳本得到最後一條記錄的路徑

drwxr-x--- - abc_grid abc_fltr   0 2012-02-05 23:24 /samples/abc/accounts/filtered/20120204 
drwxr-x--- - abc_grid abc_fltr   0 2012-02-12 14:31 /samples/abc/accounts/filtered/20120211 
drwxr-x--- - abc_grid abc_fltr   0 2012-02-19 14:31 /samples/abc/accounts/filtered/20120218 
drwxr-x--- - abc_grid abc_fltr   0 2012-02-29 00:24 /samples/abc/accounts/filtered/20120225 
drwxr-x--- - abc_grid abc_fltr   0 2012-03-05 11:36 /samples/abc/accounts/filtered/20120303 

我想要最後一條記錄和路徑。

/samples/abc/accounts/filtered/20120303 
+2

解析來自'ls'輸出小於理想。如果您詢問您的主要問題,而不是解決方案的問題,我相信您可以得到更好的答案。 – TLP 2012-03-10 04:47:13

+0

相關:http://stackoverflow.com/questions/8883091/perl-use-split-or-regular-expression-to-get-directory-names-from-text-file – daxim 2012-03-10 10:10:44

回答

3

如果我們打高爾夫,然後

ls -l|perl -lane 'END{print $F[-1]}' 

可縮短到

ls -l|perl -lane'END{print$F[-1]}' 
ls -l|perl -lane'}{print$F[-1]' 
ls -l|perl -lane}{print\$F[-1] 
ls -l|perl -anE}{say\$F[-1] 

下面是不使用ls的ungolfed解決方案。無論如何,這種方式更可靠。

perl -E'say((sort { -M $a <=> -M $b } @ARGV)[0])' \ 
    /samples/abc/accounts/filtered/* 

價:-M

+0

@JFFerguson,這個答案是爲了你的利益。 – ikegami 2012-03-09 23:40:04

+0

這不是Perl高爾夫,而是消除了不必要的「尾巴」過程。不過,我欣賞高爾夫球:-) – JRFerguson 2012-03-10 14:15:41

+0

@jdamae,更新爲一個正確的答案。 – ikegami 2012-03-11 09:45:11

2
perl -ne 's/^.* //; $last = $_; END { print $last; }' 
1

我假設在這裏,你想要的是從/樣品/ ABC /賬戶最近,修改後的文件的完全合格的路徑名/過濾的目錄。這是上面的例子。如果這是不正確的,請隨時糾正我。

你的 「純粹的Perl」 的限制,可以使用...

perl -e '$d="/samples/abc/accounts/filtered";print +(sort { -M "$a" <=> -M "$b" } glob("${d}/*"))[0], "\n"' 

但我認爲在這種情況下,我只是用外殼...

ls -1dt /samples/abc/accounts/filtered/* | tail -1 
3
ls -l|perl -lane 'END{print $F[-1]}' 
+0

甚至更​​少。謝謝。 – jdamae 2012-03-09 20:30:10